题目描述
要求在N个不重复的整数中,找出第K大的整数 ,其中0<K<N<1000000
输入格式
输入第一行为两个正整数N K
第二行为N个整数,输入保证这N个整数两两相异,每个整数的范围在-1000000到1000000之间
输出格式
输出第K大的整数值
输入样例
5 3
3 2 4 5 1
输出样例
3
思路: 快速排序的变形
#include<iostream>
#include<vector>
using namespace std;
vector<int>v;
int n, m;
int partition(int low,int high)
{
int pivotkey = v[low];
v[0] = pivotkey;
while (low<high)
{
while (low<high&&v[high] <= pivotkey)
high--;
v[low] = v[high];
while (low<high&&v[low] >= pivotkey)
low++;
v[high] = v[low];
}
v[low] = pivotkey;
return low;
}
int find_k(int low,int high)
{
int pivot;
pivot = partition(low, high);
if (pivot == m)
return v[m];
else if (pivot > m)
return find_k(low, pivot - 1);
else return find_k(pivot + 1, high);
}
int main()
{
cin >> n >> m;
v.resize(n+1);
for (int i = 1; i <= n; i++)
{
cin >> v[i];
}
cout<<find_k(1, n);
}