快速排序
思路:
忙着左右挖坑,先把选定的中心值挖走,出现个🕳,找右边小点的值补上,右边出现个🕳,就去左边找个大点的值补上,一直挖一直补,挖不动的时候把中心值填上。
核心:
(1)比中心值小的往前放,比中心值大的往后放
(2)坑是从两头向中间逼近
void quicksort(int a[],int left,int right){
if(left >= right)
return;
int center = a[left];
int i = left + 1,j = right;
while(true){
//j向左走,找第一个比中心值小的
while(a[j] > center)
j--;
//i向右走,找第一个比中心值大的
while(a[i] < center && i < right)
i++;
//右边小的和左边的大的替换一下下
if(i < j)
swap(a[i++],a[j--]);
//挖不动了,找到center具体的位置
else{
swap(a[left],a[j]);
break;
}
}
cout << "第X趟排序结果 : " << endl;
for(int i = 0;i < n;i++)
cout << a[i] << " ";
cout << endl;
quicksort(a,left,j - 1);
quicksort(a,j + 1,right);
}