选择问题(线性时间复杂度)
来源:互联网 发布:命令行启动mysql服务 编辑:程序博客网 时间:2024/06/09 15:10
采用分治策略找出第K小的元素!要求程序的时间复杂度为线性函数。
#include<iostream>#include<iterator>#include<algorithm>#include<time.h>#include<vector>using namespace std;/**选择问题(线性时间复杂度)*在beg和end之间查找第k个元素*/int Fast_find(vector<int> &vec,int beg,int end,int k){if(k>end||k<beg+1)throw range_error("输入的参数错误");if(beg+1>=end){return vec[beg];}int i ,j;for (i = beg,j = end; i < j; ){do{j--;} while (vec[j]>vec[beg]);do{i++;}while(i<end&&vec[i]<vec[beg]);if(i<j)swap(vec[i],vec[j]);}swap(vec[beg],vec[j]);if(j==k-1) return vec[j];if(j>k-1) return Fast_find(vec,beg,j,k);if(j<k-1) return Fast_find(vec,j+1,end,k);}int main(){vector<int> vec;copy(istream_iterator<int>(cin),istream_iterator<int>(),back_inserter(vec));cin.clear();int k ;cout<<"输入查找第几个元素(从小到大)!"<<endl;cin>>k;long start, end;int res;start = clock();try{ res = Fast_find(vec,0,vec.size(),k);}catch(range_error ex){cout<<ex.what()<<endl;return 0;}end = clock();cout<<"第"<<k<<"个元素"<<res<<endl;cout<<"验证!"<<endl;sort(vec.begin(),vec.end());cout<<"第"<<k<<"个元素"<<vec[k-1]<<endl;cout <<"程序运行时间(单位:毫秒): "<< end-start <<endl;return 0;}
1 0
- 选择问题(线性时间复杂度)
- 线性时间选择问题
- 线性筛选时间复杂度
- 线性时间复杂度排序
- Top k问题(线性时间选择算法)
- 选择问题的线性期望时间算法
- 线性期望时间选择问题C语言
- 线性期望时间选择问题C语言
- 算法探究:线性时间选择问题
- 算法导论(最大子数组问题-线性时间复杂度算法分析与实现)
- 线性时间复杂度排序算法
- 算法时间复杂度-线性阶
- 寻找 最小的k个数 线性选择算法 平均时间复杂度 O(n)
- LeetCode383. Ransom Note优雅解法(线性时间复杂度)
- 线性时间选择
- 线性时间选择
- 线性时间选择
- 期望线性时间选择
- 这是用什么技术实现的?是QQ新开发了linux版本还是p的图呢?
- dbms_rowid包的使用
- 我的博客
- 汉诺塔
- 初级项目管理培训心得
- 选择问题(线性时间复杂度)
- PHP开发框架
- 光耦参数
- Ubuntu12.04下samba配置与qt4.8.6安装
- ostream_iterator详细解析
- 虚拟机镜像相关操作
- 关于myeclipse安装extjs4.2提示插件spket遇到的一些问题及解决办法
- php记录日志方法
- IHttpModule.Init方法被执行多次的原因