求第i个小的元素 时间复杂度O(n)
#include<iostream> //求第i个小的元素 时间复杂度O(n)
#include<cstdlib>
#include<ctime>
using namespace std;void swap(double *dPara1, double *dPara2)
{ double temp = 0.0; temp = *dPara1; *dPara1 = *dPara2; *dPara2 = temp;
} int randompartitionA( double dArr[], int p, int q) //划分
{srand((unsigned)time(NULL));int account = q-p+1;int index = 0;int i = p;index = rand()%account+p;swap(dArr[p], dArr[index]);int x = dArr[p];for( int j=p+1; j<=q; j++){if( dArr[j]<=x ){i++;swap(dArr[i], dArr[j]);}}swap(dArr[i], dArr[p]);return i;
}int randompartitionB( double dArr[], int p, int q) //划分
{srand((unsigned)time(NULL));int account = q-p+1;int index = 0;index = rand()%account+p;swap(dArr[p], dArr[index]);double x = dArr[p];int low = p;int high = q;while( low<high ){while(low<high&&x<dArr[high]) --high;dArr[low]=dArr[high];while(low<high&&x>dArr[low]) ++low;dArr[high]=dArr[low];}dArr[low] = x;return low;
}double RANDOMIZED_SELECT( double dArr[], int p, int q, int i)
{if( p==q ){return dArr[p];}int r = randompartitionB( dArr, p, q); // int r = randompartition( dArr, p, q);int k = r-p+1;if( i==k ){return dArr[r];}else if( i<k ){return RANDOMIZED_SELECT( dArr, p, r-1, i);}else{return RANDOMIZED_SELECT( dArr, r+1, q, i-k);}
}
int main()
{ double darr[9] = { 1.0, 2.0 ,6.3, 3.5, 8.3, 0.43, 9, 10, 2.2 }; cout<<RANDOMIZED_SELECT( darr, 0, 8, 5);cout<<endl;return 0;}
求第i个小的元素 时间复杂度O(n)相关推荐
- 求无序数组的第二小的元素
1. 比较是成对比较的,先拿前2个数比较,大的那个记作当前最大值,小的那个是第二大值.然后每次比较一队元素,大的那个去和最大值比,如果比最大值大,就把它记为最大的,原来的最大和较小的那个比,大的记为第 ...
- 求包含n(n>1)个元素的无序序列中第k小的元素。
求包含n[n>1]个元素的无序序列中第k小的元素. 题目描述 C++程序答案 题目描述 [问题描述] 编写一个实验程序,利用STL中的priority_queue(优先队列)求出包含n个元素的无 ...
- POJ 1442 Black Box(大小堆,求第K小的元素)
文章目录 1. 题目链接 2. 题目解读 3. 代码 3.1 Runtime Error 代码 1. 题目链接 http://poj.org/problem?id=1442 2. 题目解读 可以利用大 ...
- LeetCode 378. 有序矩阵中第K小的元素(二分查找)
文章目录 1. 题目 2. 解题 2.1 暴力法 2.2 二分查找 1. 题目 给定一个 n x n 矩阵,其中每行和每列元素均按升序排序,找到矩阵中第k小的元素. 请注意,它是排序后的第k小元素,而 ...
- 2018腾讯内部转岗面试题3——找出数组中比左边大比右边的小的元素
题目: 以时间复杂度 O(n) 从长度为 n 的数组中找出同时满足下面两个条件的所有元素: (1)该元素比放在它前面的所有元素都大: (2)该元素比放在它后面的所有元素都小. 分析: 面试官给的上面冗 ...
- 378、有序矩阵中第K小的元素
题目:给定一个 n x n 矩阵,其中每行和每列元素均按升序排序,找到矩阵中第 k 小的元素 归并排序 思路及算法 由题目给出的性质可知,这个矩阵的每一行均为一个有序数组.问题即转化为从这 n 个 ...
- LeetCode-378.有序矩阵中第k小的元素、二分查找
给定一个 n x n 矩阵,其中每行和每列元素均按升序排序,找到矩阵中第 k 小的元素.请注意,它是排序后的第 k 小元素,而不是第 k 个不同的元素.示例:matrix = [ [ 1, 5, 9] ...
- [leetcode] 230. Kth Smallest Element in a BST 找出二叉搜索树中的第k小的元素
题目大意 https://leetcode.com/problems/kth-smallest-element-in-a-bst/description/ 230. Kth Smallest Elem ...
- LeetCode每日训练2—有序矩阵中第K小的元素(7.2)
题目描述 给定一个 n x n 矩阵,其中每行和每列元素均按升序排序,找到矩阵中第 k 小的元素. 请注意,它是排序后的第 k 小元素,而不是第 k 个不同的元素. 示例: matrix = [ [ ...
最新文章
- 977dh用vbs通过wsh创建桌面快捷方式,快速启动,修改ie主页的恶意代码 ...
- 关于Vue.js2.0生命周期的研究与理解
- html手机和电脑显示内容不同,同一个网站,手机端跟电脑端显示不同是怎么实现的?...
- java设计模式5--原型模式(Prototype)
- 记录MySQL下所执行的所有命令
- Gradient Boost Decision Tree(GBDT)中损失函数为什么是对数形式
- 取sql数据乱码_不基于备份和表,生产系统数据误删就能完全恢复
- SRV记录注册不成功的可能的原因
- Spring Data Jpa中的save和saveAndFlush方法
- 那些非常好用的电脑软件
- 一、云计算-云平台-国产-华为-FusionSphere+HCIE Cloud相关知识点+笔试题库
- 『转』VC 开机自动启动程序代码
- matlab:使用4阶龙格库塔方法求解常微分方程组
- 你还没有变成真正的孙悟空托世
- HP 1022N 网络打印机安装步骤
- 成都普赛睿生物医药科技有限公司-IT岗位招聘
- 计算机编程语言及C语言简介,编程语言基础:C语言
- 6.获取环球时报关键词新闻--动态网页Ajax
- java sca_SCA java编码入门
- 这样的老板,真想把他拖进WC爆zou一顿.....
热门文章
- mac服务器证书失效,Mac OS X Server:软件更新证书过期
- pandas数据合并与重塑_PANDAS 数据合并与重塑(concat篇)
- html ui 下拉列表,Atitit.ui控件-下拉菜单选择控件的实现select html_html/css_WEB-ITnose...
- c语言综合作业答案,C语言作业答案
- Visual Studio Code打开项目
- 二进制数表示形式:原码、反码与补码
- Python学习笔记:集成开发环境
- 【BZOJ1911】【codevs1318】特别行动队,斜率优化DP
- 16.对极几何——极线约束,收敛相机,平行图像平面,两个立体对 测验_2
- 将来时的条件句_58