第k个数
第一次直接用quick_sort(),然后过了?应该数据比较水
#include<iostream>
using namespace std;
int n, k;
const int N = 1e6 + 5;
int a[N];
void quick_sort(int arr[], int l, int r){
if(l >= r) return;
int i = l - 1, j = r + 1, x = arr[(l + r) >> 1];
while(i < j){
do i++; while(arr[i] < x);
do j--; while(arr[j] > x);
if(i < j) swap(arr[i], arr[j]);
}
quick_sort(arr, l, j);
quick_sort(arr, j + 1, r);
}
int main(){
scanf("%d %d", &n, &k);
for(int i = 0; i < n; i++) scanf("%d", &a[i]);
quick_sort(a, 0, n - 1);
printf("%d", a[k - 1]);
}
二刷
#include<iostream>
using namespace std;
int n, k;
const int N = 1e6 + 5;
int arr[N];
int quick_sort(int l, int r, int k){
if(l == r) return arr[l];
int i = l - 1, j = r + 1, x = arr[(l + r) >> 1];
while(i < j){
do i++; while(arr[i] < x);
do j--; while(arr[j] > x);
if(i < j) swap(arr[i], arr[j]);
}
if(k <= j - l + 1) quick_sort(l, j, k);
else quick_sort(j + 1, r, k - j + l - 1);
}
int main(){
scanf("%d %d", &n, &k);
for(int i = 0; i < n; i++) scanf("%d", &arr[i]);
cout << quick_sort(0, n - 1, k);
}