友链:
找一个基准数p(默认区间内的第一个数为基准数,再不断更新基准数),以p为基准,把区间分为小于p和大于p的两个子区间,然后分别在两个子区间再找一个中间大的基准数,再次分成两个区间.....直到子区间长度为1时停止
void quicksort(int a[],int x,int y){ int p=a[x]; int l=x,r=y; if(l>r) return; while(l=p)//这两个while的顺序不能换,否则会错 r--; while(l <=p) l++; //以上两个while循环执行的目的是把[min,中间大的数]放在左边子区间,把[中间大,max]放在右边子区间 int temp;//不符合分配条件的就交换 temp=a[l]; a[l]=a[r]; a[r]=temp; //交换之后的a[l]自然就是区间中间大的数 } //更新基准数p,为下一次排序准备 int temp; temp=p; p=a[l]; a[l]=temp; quicksort(a,x,l-1); quicksort(a,l+1,y); }