这个手写的快排让flag作为索引为什么不行(0 pts),

P1923 【深基9.例4】求第 k 小的数

tutu_niu @ 2024-02-23 14:44:42


#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
int n=0,k=0;
void swap(int * p1,int *p2){
 int temp=*p1;
 *p1=*p2;
 *p2=temp;
}
int a[5000010];
void quicksor(int *a,int l ,int r){
int i=l,j=r;
int flag=(l+r)/2;
do{  while(a[i]<a[flag]){i++;}
    while(a[j]>a[flag]){j--;}
    if(i<=j){swap(&a[i],&a[j]);i++;j--;  }
}while(i<=j);
if(l<j)quicksor(a,l,j);
if(i<r)quicksor(a,i,r);

}
int  main(){
cin>>n>>k; 
for(int i=0;i<n;i++){
    cin>>a[i]; 
}
quicksor(a,0,n-1);
cout<<a[k];
    return 0;
}
///将flag赋值为a[(l+r)/2]却有60 pts

|