请教快排代码
查看原帖
请教快排代码
890321
mooktian楼主2023/8/12 17:24

深入浅出书上抄的代码,可以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--;//从又找比哨兵小的数
2023/8/12 17:24
加载中...