题目描述
给出一个数字总个数为 N(N<=2500000)的数列,求出其中的第 K(K<=N)小值。
输入
第一行两个整数,分别为N,K接下来为 N个整数a[i](a[i]在长整型范围内)
输出
仅一行
一个整数,为数列的第 K小值
样例输入
5 41 2 3 4 5
样例输出
2
这题挺坑的。。不过就是一个对快排的优化,总得来说就是去重。
这题挺坑的。。不过就是一个对快排的优化,总得来说就是去重。
#include <iostream>
using namespace std;
static int aa[2500000 + 5];
void Q_sort(int a[], int num)
{
int i = 0;
int j = num - 1;
int key = a[0];
if (num > 1)
{
while (i != j)
{
for (; i < j; --j)
{
if (a[j] < key)
{
a[j] = a[i];
break;
}
}
a[i] = key;
}
Q_sort(a, i);
Q_sort(a + i + 1, num - i - 1);
}
}
int main()
{
int N, K;
int i;
cin >> N >> K;
for (i = 0; i < N; ++i)
cin >> aa[i];
Q_sort(aa, N);
cout << aa[K-1];
return 0;
}