快速排序-quicksort
友链:https://blog.csdn.net/weixin_42060896/article/details/88168462?tdsourcetag=s_pcqq_aiomsg
找一个基准数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<r) { while(l<r&&a[r]>=p)//这两个while的顺序不能换,否则会错 r--; while(l<r&&a[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); }
等风起的那一天,我已准备好一切