xiuman @ 2024-01-28 18:15:38
#include<bits/stdc++.h>
using namespace std;
int a[5000002]{};
int n,k;
void qsort(int low,int high){
int i=low,j=high,flag=a[(high+low)/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(k<=j)qsort(low,j);
else if(i<=k)qsort(i,high);
else {
cout<<a[k];
return;
}
}
int main(){
cin>>n>>k;
for(int i=0;i<n;i++){
cin>>a[i];
}
qsort(0,n-1);
}
by 细数繁星 @ 2024-01-28 18:22:17
@xiuman qsort 是
by xiaoshumiao @ 2024-01-28 18:29:16
@2044_space_elevator 处理的区间每次都会减半,所以是线性的。他这不是标准的快速排序,而是改进的快排。
by jiadahao @ 2024-01-28 20:02:34
sort不行吗?????
by xiuman @ 2024-01-28 20:16:15
@jiadahao 我想看看我这个到底出了什么问题
by prlygates1121 @ 2024-02-06 00:46:54
@xiuman 咱俩前面写的几乎一样。事实证明读取n个数字的时候要用scanf而不能用cin,后者似乎更耗时间。