快速排序
思路:
忙着左右挖坑,先把选定的中心值挖走,出现个🕳,找右边小点的值补上,右边出现个🕳,就去左边找个大点的值补上,一直挖一直补,挖不动的时候把中心值填上。
核心:
(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);
}
本文详细介绍了快速排序算法的工作原理,通过挖坑与填补的方式阐述了如何将数组元素进行有效排序。核心思想是选取中心值,将小于中心值的元素放在其左边,大于中心值的放在右边,逐步缩小排序范围。提供的C++代码展示了快速排序的实现过程,并进行了多趟排序的结果展示。
1233

被折叠的 条评论
为什么被折叠?



