所有细节全看注释!!!
#include<bits/stdc++.h>
using namespace std;
void fastSort(vector<int>& vec, int low, int high) {
//快排算法
int left = low, right = high;
//TODO: 递归停止的条件
if (low >= high) {
return;
}
//TODO:1 选择key
int key = vec[low];
//TODO2: 执行快排算法,左右指针分别向中间游走,结束的条件是两指针相遇,注意此处不能写“=”
while (left < right) {
while (vec[right] >= key && right > left){//同时满足右指针在左指针的右边
//找到小于key的元素
right--;
}
if (right > left) {
//vec[left] = vec[right];
swap(vec[left], vec[right]);
}
while (vec[left] <= key && right > left) {
//找到大于key的元素
left++;
}
if (left < right) {
//vec[right] = vec[left];
swap(vec[left], vec[right]);
}
}
//TODO3: 更新中间分界点,此时left左边的都小于key,右边的都大于key
vec[left] = key;
//TODO4: 递归继续
fastSort(vec, low, left - 1);
fastSort(vec, left + 1, high);
}
int main() {
int size;
cin >> size;
vector<int> vec(size);
for (int i = 0; i < size; i++) {
cin >> vec[i];
}
fastSort(vec, 0, size-1);
for (int i = 0; i < size; i++) {
cout << vec[i]<<' ';
}
return 0;
}