tip:递归不要陷进去了,一定要找其中的关系,否则很难理解递归。
#include<iostream>
#include <vector> //包含容器vector
#include<algorithm>
using namespace std;
int getpos(vector<int> &a, int left, int right) {
int temp = a[left]; //temp值为哨兵
while (left < right) {//终止条件
while (left<right && a[right]>temp) right--; //一直找 直到找到不大于temp的值
a[left] = a[right];
while (left < right && a[left] <= temp) left++; //一直找 直到找到大于temp的值
a[right] = a[left];
}
a[left] = temp;
return left;
}
void sort(vector<int> &a, int left, int right) {
if (left < right) {
int pos = getpos(a, left, right);
sort(a, left, pos - 1); //对于左边进行排序
sort(a, pos + 1, right); //对右边进行排序
}
}
int main()
{
vector<int> a = { 3,4,23,1,7 };
sort(a, 0, 4);
for (int i = 0;i != a.size();++i)
{
cout << a[i]<<" ";
}
return 0;
}