Dreams_Knight @ 2023-01-31 10:46:57
#include<bits/stdc++.h>
using namespace std;
int n , a[10000005];
void quick_sort(int l , int r){
if(l >= r)
return;
int mid = a[l] , i = l , j = r;
while(i < j){
while(i < j && a[j] >= mid)
j--;
while(i < j && a[i] <= mid)
i++;
swap(a[i] , a[j]);
}
a[l] = a[i];
a[i] = mid;
quick_sort(l , i-1);
quick_sort(i+1 , r);
}
int main(){
int n , z;
cin >> n >> z;
for(int i = 0;i < n;i++){
cin >> a[i];
}
quick_sort(0 , n-1);
cout << a[z];
return 0;
}
by Zwanan @ 2023-01-31 13:25:46
可以在每次快排后,把分段的部分优化,只排序需要用的一段
举个例子
取 k = 1
4 2 3 1 5
第一次的两段为:
1 2 3 | 4 5
两个区间(1,3) (4,5)
这个数据特殊(才会左右有序)
这个时候只需要判断 k 所在的区间,对该区间进行排序查找就可以了