Quicksort(int*,int,int) 快速搜索

xiaoxiao2021-02-27  705

#include<stdio.h> void Quicksort(int *p,int left,int right)  {     int i,j,key;     if(left<right)       //进行了一次选择判断,避免死循环问题     {         i=left;         j=right;         key=p[left];         while(i<j)         {             while(key<=p[j]&&i<j)j--;             if(i<j)p[i++]=p[j];             while(key>=p[i]&&i<j)i++;             if(i<j)p[j--]=p[i];         }                          //以上四句全部限制i<j,其目的是防止j在i的前面导致后面的死循环;实际上,这一个限制直接使得最后跳出循环的结果必然是i==j,者也是后面的i可以换成j         p[i]=key;             //检验方式:printf("%d==%d\n",i,j);         Quicksort(p,left,i-1);            //在判断之内,进行的递归套用     }         Quicksort(p,right,i+1);        } void main() {     int a[5];     int i;     for(i=0;i<5;i++)     {         scanf("%d",&a[i]);     }     Quicksort(a,0,4);     for(i=0;i<5;i++)     {         printf("%d\t",a[i]);     }

}

注:以上代码是自己参考google上的综合,选取学习的一种自己看来最简单点的方式

转载请注明原文地址: https://www.6miu.com/read-522.html

最新回复(0)