您的位置:首页 > 其它

利用快排思想找数组中第K小的数

2018-03-26 20:50 183 查看
#include<iostream>
#include<vector>
using namespace std;
int QP(vector<int>arr, int begin, int end,int k)
{
if (begin == end)return arr[begin];
int first = begin;
int last = end;
int key = arr[first];
while (first < last)
{
while (first < last&&key <= arr[last])
last--;
arr[first] = arr[last];
while (first < last&&key >= arr[first])
first++;
arr[last] = arr[first];
}
arr[first] = key;
if (first+1 == k)return arr[first];
else if (first+1 < k)return QP(arr, first + 1, end, k);
else return QP(arr, begin, first - 1, k);
}
int findk(vector<int>arr,int k)
{
int len = arr.size();
return QP(arr, 0, len - 1, k);
}
int main()
{
vector<int>a = { 6,5,7,8,1,3,4,9,2,0 };
int No = findk(a, 9);
cout << No;
}
我在想数组从小到大前K个数是不是可以先把第K个数找出来,然后再遍历一遍数组把所有比该数字小的数字全部输出出来?
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: