深入浅出书上抄的代码,可以AC
#include <bits/stdc++.h>
#define f(i,a,b) for(int i=a;i<=b;i++)
#define g(i,a,b) for(int i=a;i>=b;i--)
using namespace std;
int n,i,j;
int a[100015];
void quicksort(int a[],int left,int right) {
int i = left,j = right,flag =a[(left+right)/2];
do {
while(a[i] < flag) i++;//从左找比哨兵大的数
while(a[j] > flag) j--;//从又找比哨兵小的数
if(i <= j) {
swap(a[i],a[j]);
i++;j--;
}
}while(i<=j);
if(left < j) quicksort(a,left,j);
if(right > i) quicksort(a,i,right);
}
int main(){
cin >> n;
f(i,1,n) cin >> a[i];
quicksort(a,1,n);
f(i,1,n) cout << a[i] << " ";
return 0;
}
但是对这两句不是很理解
while(a[i] < flag) i++;//从左找比哨兵大的数 while(a[j] > flag) j--;//从又找比哨兵小的数 就改了一下,结果0分。
while(a[i] <= flag) i++;//从左找比哨兵大的数
while(a[j] >= flag) j--;//从又找比哨兵小的数