20170927_快排应用_数组中寻找第K大的数字
来源:互联网 发布:查看淘宝客佣金 编辑:程序博客网 时间:2024/05/16 14:17
20170927_快排应用_数组中寻找第K大的数字
在数组中寻找第K大的数:
例如,输入:4,5,1,6,2,7,3,8 这8个数字,
输出第1大的数:8
输出第3大的数:6
/*在数组中寻找第K大的数例如,输入:4,5,1,6,2,7,3,8 这8个数字,输出第1大的数:8输出第3大的数:6*/#include<iostream>#include<vector>#include<algorithm>#include<numeric>using namespace std;class Solution{public:void GetMinKthNumbers(vector<int> &input, int k){int n=input.size();if(k>n || n<=0 || k<=0){cout<<-1<<endl;return;}int start=0;int end=n-1;int index=partion(input,start,end);//返回的是第(index+1)小元素值while(index!=(n-k)){if(index>(n-k)){end=index-1;index=partion(input,start,end);}else{start=index+1;index=partion(input,start,end);}}cout<<input[index]<<endl;}public://快速排序的一次划分函数int partion(vector<int> &input, int start, int end){int n=input.size();if(n<1)return -1;int i=start;int j=end;while(i<j){while(i<j && input[i]<=input[j])--j;if(i<j){swap(input[i],input[j]);++i;}while(i<j && input[i]<=input[j])++i;if(i<j){swap(input[i],input[j]);--j;}}return i;}};int main(void){//int input[]={4,5,1,6,2,7,3,8};int ch=0;vector<int> input;while(cin>>ch)input.push_back(ch);int n=input.size();cin.clear();//换行,清除输入缓冲!!!int k=0;cin>>k;class Solution object;object.GetMinKthNumbers(input,k);system("pause");return 0;}
阅读全文
0 0
- 20170927_快排应用_数组中寻找第K大的数字
- 20170927_快排应用_数组中寻找第K小的数字
- 20170927_快排应用_数组中寻找最小的K个数
- 20170927_快排应用_数组中寻找最大的K个数
- 寻找无序数组中第k大的数——快排思想
- 寻找第K大的数(快排思想)
- 快排算法及利用快排思想寻找第k大(小)的数
- 快排应用-第k大元素
- 利用快排思想找出数组中第k大的元素
- 寻找数组中的第K大的元素&找数组中重复数字
- 寻找数组中最小的k个数(快排和堆排)
- 寻找数组中最小的k个数(快排和堆排)
- 寻找数组中最小的k个数(快排和堆排)
- 20170927_快排应用_将数组中的大小写字母分开
- 20170927_快排应用_荷兰国旗问题
- 寻找第k大数(快排思想)
- 寻找单个无序数组中第K小的数字
- 寻找第K大的数字
- Android数据备份(Android Data Backup)
- 算法:二分查找
- js多图片压缩上传及后台处理
- TCP通过 JAVA Socket 实现 RPC 远程调用
- 扔盘子
- 20170927_快排应用_数组中寻找第K大的数字
- 顺序表应用3:元素位置互换之移位算法
- Find the maximum of the three numbers(Take this opportunity to review the sorting algorithm)
- python 并发编程
- C#学习——识别U盘
- 十分钟搞定pandas
- 牛客网编程题:进制均值
- dynamics.js
- 学习笔记08