应该算是竞赛题要求,一直显示内存超限,不知道为什么,救命救命
对于给定的n个元素的数组a[0:n-1],从中找出第k小的元素并输出。
测试数据有多组,每组占两行,第一行是整数n和k(1≤k<n≤1000),第二行是n个整数,各整数之间均由一个空格分隔。
输出第k小的元素。
输入:
5 2
3 9 4 1 6
7 3
4 59 7 23 61 55 46
输出:
3
23
代码
#include<iostream>
using namespace std;
int select(int a[],int k,int left,int right){
int l, r,key;
l = left;
r = right;
key = a[left];
while (l < r&&a[r] >= key)r--;
if (l < r){ a[l] = a[r]; l++; }
while (l < r&&a[l] <= key)l--;
if (l < r){ a[r] == a[l]; r++; }
a[l] = key;
if (l == k - 1)
return a[l];
else if (l>k - 1)select(a, k, left, l - 1);
else select(a, k, l + 1, right);
}
int main(){
int n, k, *a;
while (cin >> n){
a = new int[n];
cin >> k;
for (int i = 0; i < n; i++)
cin >> a[i];
cout << select(a,k,0,n-1) << endl;
delete[] a;
}
}