#include <iostream>
#include <algorithm>
using namespace std;
const int maxn = 100000;
int a[maxn];
void quick_sort(int l, int r){
int temp = a[(l + r) >> 1];
int i = l, j = r;
while(i <= j){
while(a[i] < temp){
i++;
}
while(a[j] > temp){
j--;
}
if(i <= j){
swap(a[i], a[j]);
i++; j--;
}
}
if(l < j) quick_sort(l, j);
if(i < r) quick_sort(i, r);
}
int n;
void solve(){
ios::sync_with_stdio(false);
cin >> n;
for(int i = 0; i < n; ++i){
cin >> a[i];
}
sort(a, a + n);
for(int i = 0; i < n; ++i){
cout << a[i] << ' ';
}
}
int main(){
solve();
return 0;
}
为什么不是a[i] <= temp, a[j] <= temp呢?
当输入4 3 2 1时候,就会出现一系列错误。当a[i]可以等于temp时,那么当a[i]到达temp的位置的时候就会直接越过去,当右边还有小于temp的数字的时候,a[j]还没来得及处理掉,那么就不能够保证temp的的左边全是小于等于temp的数字,右边全是大于等于temp的数字。