#include <iostream>
#include <vector>
using namespace std;
class Solution
{
public:
void quickSort(vector<int> &array, int left, int right)
{
// 以最左边的数(left)为基准
if (left < right)
{
int base = partion(array, left, right); // 对数组进行分割,取出下次分割的基准标号
quickSort(array, left, base - 1);
quickSort(array, base + 1, right);
}
}
private:
int partion(vector<int> &array, int left, int right)
{
// 以最左边的数(left)为基准
int baseNum = array[left];
while (left < right)
{
while (left < right && array[right] >= baseNum)
right--; //right--直到 array[right] < baseNum
array[left] = array[right]; //找到了比baseNum小的元素,将这个元素放到最左边left的位置
while (left < right && array[left] <= baseNum)
left++; //left++直到array[left] > baseNum
array[right] = array[left];
}
array[left] = baseNum; // 最后将baseNum放到left位置。此时,left位置的左侧数值应该都比left小;
return left;
}
};
int main()
{
vector<int> array{2, 4, 5, 7, 6, 9, 8, 1, 8};
Solution s;
s.quickSort(array, 0, array.size() - 1);
for (auto i : array)
cout << i;
cout << endl;
system("pause");
return 0;
}