一、快速排序的三种思想
1、左右指针法
快速排序的基本思想:任取待排序元素序列中
的某元素作为基准值,按照该排序码将待排序集合分割成两子序列,左子序列中所有元素均小于基准值,右子序列中所有元素均大于基准值,然后最左右子序列重复该过程,直到所有元素都排列在相应位置上为止。
第一趟的排序结果如下:
我们可以发现数字6其实已经排好了,因为数字6所在的位置就是它最终的位置,之后我们需要去递归它的左半边区间和它的右半边区间,将一个一个数给依次放在它最终的位置,这样该序列就会为有序了。
代码实现:
int PartSort1(int* a, int left, int right)
{
int keyi = left;
while (left<right)
{
while (left<right&&a[right]>=a[keyi]){
right--;
}
while (left < right&&a[left]<= a[keyi]){
left++;
}
Swap(&a[left], &a[right]);
}
Swap(&a[left], &a[keyi]);
return left;
}
void QuickSort(int* a, int left, int right)
{
if (left >= right)
return;
int key = PartSort1(a, left, right);
QuickSort(a, left, key - 1);
QuickSort(a, key + 1, right);
}
接下来我给大家分析一个代码需要注意的问题,因为我这里呢&#x