快速排序算法
快速排序算法每次处理确定一个元素的最终位置。
每次处理确定一个基准元素(一般为第一个元素),将所有比基准元素小的放基准元素前面(无序),将所有比基准元素大的放基准元素后面(无序)。处理v.size()次后数组排序完成。
每次处理步骤如下:
①确定一个基准元素,本步骤以第一个元素为例。
②设置左右指针,分别指向列头和列位。
③右指针从后往前遍历找到一个小于基准元素的值,放入左指针处(基准元素处,正好空缺)。
④左指针从前往后遍历找到一个大于基准元素的值,放入右指针处(右指针已放入基准元素处,正好空缺)。
⑤重复③④步骤,直到左右指针重合。
⑥将基准元素放入指针重合处(因为数组数是一定的,最后肯定有一个空位)。
⑦分别快速排序基准元素左部和右部。
C++实现
void quickSort(vector<int>& v, int begin, int end) {
if (begin >= end) return;
int temp = v[begin]; //以左1为基准
int i = begin; //从左往右找大的
int j = end; //从右往左找小的
while (i < j) {
while (i < j && v[j] > temp) j--; //从右往左找小的,
v[i] = v[j]; //将小的放入右边
while (i < j && v[i] <= temp) i++; //从左往右找大的
v[j] = v[i]; //将大的放入左边
}
//循环结束时应该 i == j,且在基准的最终位置
v[i] = temp; //放入基准元素,
quickSort(v, begin, i - 1); //快速排序左部
quickSort(v, i + 1, end); //快速排序右部
}