#include<iostream>
#include<vector>
#include<deque>
using namespace std;
int Parition(vector<int>& br, int left, int right)//划分区间函数
{
int i = left, j = right;
int tmp = br[i];
while (i < j)
{
while (i < j && br[j] > tmp) --j;
if (i < j) br[i] = br[j];
while (i < j && br[i] <= tmp) ++i;
if (i < j) br[j] = br[i];
}
br[i] = tmp;
return i;
}
int Select_K(vector<int>& br, int left, int right, int k)
{
if (left == right && k == 1)
return br[left];
int index = Parition(br, left, right);
int pos = (index - left + 1);
if (k <= pos)
return Select_K(br, left, index, k);//左区间递归
else
return Select_K(br, index + 1, right, k - pos);//右区间递归
}
int main()
{
vector<int> ar = { 56,34,100,23,78,90,12,45,67,89 };
for (int k = 1; k <= ar.size(); ++k)//测试
{
cout << k << " => " << Select_K(ar, 0, ar.size() - 1, k) << endl;
}
return 0;
}
图论