1.快速排序的思想
快速排序的过程可以分为以下几步:
- 先找一个基准,将这个基准赋值给临时变量tmp中
- 从后往前找第一个比基准小的数据赋值到i位置
- 从前往后找第一个比基准大的数据赋值到j位置
- 重复步骤1和步骤2直到i和j相遇,然后将tmp的值赋给i和j相遇的位置
- 将基准左边和基准右边的数据继续按照步骤1,2,3,4进行,直到数据全部排完。
2.基本实现
2.1第一种排序
首先找基准值,然后cur标记left,prev标记cur-1,然后cur遍历,分为两个阶段:第一个是cur没找到比基准值大的,prev和cur一直紧挨着。第二种是找到了,然后cur++,继续遍历,找到比基准值小的,然后才让++prev,此时prev和cur换一下位置,cur继续遍历,循环结束,最后right-1和++prev位置交换,放好基准值的位置。
int Partion1(int* array, int left, int right)
{
int cur = left;
int prev = cur - 1;
int key = array[right - 1];
while (cur < right)
{
if (array[cur] < key && ++prev != cur)
Swap(&array[cur], &array[prev]);
cur++;
}
if (++prev != (right - 1))
Swap(&array[prev], &array[right - 1]);
return prev;
}
2.2第二种排序
先标记基准值(这里先取最后一个元素为基准值,记录起来),之后定义两个指针,然后前后遍历,找到比基准值大的或者小的的元素的位置,然后进行标记,标记成功后进行交换,最后添加一个循环,此时的begin和end是在一个位置的,你要将begin和right-1(其实就是基准值的位置)位置的元素交换。
int Partion2(int* array, int left, int