利用快排思想找数组中第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个数找出来,然后再遍历一遍数组把所有比该数字小的数字全部输出出来?
相关文章推荐
- 利用快排思想找出数组中第k大的元素
- 利用快速排序思想求数组第k大元素
- 利用快速排序思想找出数组中第K大的数
- 利用快速排序的思想寻找乱序数组第k大数
- 利用快排思想寻找数组中第K大(小)的数字
- 【滴滴笔试】利用快排找到一个无序的数组中的第K大的数
- 利用归并排序思想求数组中的逆序对
- [BUC-2.10]利用分治的思想求无序数组中的最大值和最小值以及求第二大的值(分治的思想可以使得比较的次数1.5N-2)
- 从n个元素中找出第K小的数 利用快排的思想来实现
- 寻找无序数组中第k大的数——快排思想
- 003-20利用伴随数组解决在指定区间第k小(大)的数——重复查看,区间任意
- 利用快速排序算法的思想,在一组随机排序数中,查找第K小的值。
- 算法思想:关于找数组中第K大的数的思考
- 利用后缀数组 前缀 LCP最长公共前缀求第K大的子串
- 关于利用快排思想求第K小数的分析
- 快排算法及利用快排思想寻找第k大(小)的数
- 利用perl从大量数据中筛选我们我们需要的数据,核心思想就是根据格式的一致性,将每一行利用split转换成数组,然后输出对应的数组
- 基于快速排序思想的随机排列的数组中找第k小的数
- 数组中最大第K元素(快排思想)
- 快速排序思想的应用--求数组中第k小的数