寻找第k大的数(快排思想)
#include <cstdio>
#include <algorithm>
using namespace std;
int a[10000005], n, k;
void Quick(int low, int high) {
if (low >= high) return ;
int i = low;
int j = high;
int key = a[low];
while(i < j) {
while(i < j && key <= a[j]) j --;
a[i] = a[j];
while(i < j && key >= a[i]) i ++;
a[j] = a[i];
}
a[i] = key;
if(i == k-1) printf("%d\n", a[i]);
else{
if(i < k-1) Quick(i+1, high);
else Quick(low, i-1);
}
}
int main(int argc, char const *argv[]) {
scanf("%d %d", &n, &k);
for (int i = 0; i < n; i++) scanf("%d", &a[i]);
Quick(0, n-1);
return 0;
}