1 主要思想
5 2 4 8 6 3 2 4 8
1 )从数列端选取第一个元素比如5,经过一次大循环,让此元素位于数列中间。此时数列被分为两部分,小于等于5 以及 大于等于5的。之后对小于等于5的部分数列以及大于等于5的数列再次应用此方法,各自又可以分为两个子部分,循环往复,最后经过回溯,就可以完成排序。排序的终止条件是左边的索引low >= high。
2)对于每个循环中的操作是,获取左端第一个元素,存入变量pivot,从右边第一个值开始比较,如果比pivot大或者等于,就不移动,这是希望的,如果比pivot小就将其放入空缺处,也就是第一个元素处。
此时空缺的位置就转移到后边,再从左边第二个元素起判断,小于或者等于pivot就不移动,否则就移动到后边。
经过这样的操作,最终在左边索引low等于右边缩影high时,将pivot放入此位置,就完成了此次循环。在此后就开始对pivot前以及后边的数列应用此方法。
2 动图
此动图来自于菜鸟教程:链接
3 代码
#include <iostream>
#include <vector>
using namespace std;
vector<int> sort(vector<int