#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. 求无序数组的第二小的元素

    1. 比较是成对比较的,先拿前2个数比较,大的那个记作当前最大值,小的那个是第二大值.然后每次比较一队元素,大的那个去和最大值比,如果比最大值大,就把它记为最大的,原来的最大和较小的那个比,大的记为第 ...

  2. 求包含n(n>1)个元素的无序序列中第k小的元素。

    求包含n[n>1]个元素的无序序列中第k小的元素. 题目描述 C++程序答案 题目描述 [问题描述] 编写一个实验程序,利用STL中的priority_queue(优先队列)求出包含n个元素的无 ...

  3. POJ 1442 Black Box(大小堆,求第K小的元素)

    文章目录 1. 题目链接 2. 题目解读 3. 代码 3.1 Runtime Error 代码 1. 题目链接 http://poj.org/problem?id=1442 2. 题目解读 可以利用大 ...

  4. LeetCode 378. 有序矩阵中第K小的元素(二分查找)

    文章目录 1. 题目 2. 解题 2.1 暴力法 2.2 二分查找 1. 题目 给定一个 n x n 矩阵,其中每行和每列元素均按升序排序,找到矩阵中第k小的元素. 请注意,它是排序后的第k小元素,而 ...

  5. 2018腾讯内部转岗面试题3——找出数组中比左边大比右边的小的元素

    题目: 以时间复杂度 O(n) 从长度为 n 的数组中找出同时满足下面两个条件的所有元素: (1)该元素比放在它前面的所有元素都大: (2)该元素比放在它后面的所有元素都小. 分析: 面试官给的上面冗 ...

  6. 378、有序矩阵中第K小的元素

    题目:给定一个 n x n 矩阵,其中每行和每列元素均按升序排序,找到矩阵中第 k 小的元素 归并排序 思路及算法   由题目给出的性质可知,这个矩阵的每一行均为一个有序数组.问题即转化为从这 n 个 ...

  7. LeetCode-378.有序矩阵中第k小的元素、二分查找

    给定一个 n x n 矩阵,其中每行和每列元素均按升序排序,找到矩阵中第 k 小的元素.请注意,它是排序后的第 k 小元素,而不是第 k 个不同的元素.示例:matrix = [ [ 1, 5, 9] ...

  8. [leetcode] 230. Kth Smallest Element in a BST 找出二叉搜索树中的第k小的元素

    题目大意 https://leetcode.com/problems/kth-smallest-element-in-a-bst/description/ 230. Kth Smallest Elem ...

  9. LeetCode每日训练2—有序矩阵中第K小的元素(7.2)

    题目描述 给定一个 n x n 矩阵,其中每行和每列元素均按升序排序,找到矩阵中第 k 小的元素. 请注意,它是排序后的第 k 小元素,而不是第 k 个不同的元素. 示例: matrix = [ [ ...

最新文章

  1. 977dh用vbs通过wsh创建桌面快捷方式,快速启动,修改ie主页的恶意代码 ...
  2. 关于Vue.js2.0生命周期的研究与理解
  3. html手机和电脑显示内容不同,同一个网站,手机端跟电脑端显示不同是怎么实现的?...
  4. java设计模式5--原型模式(Prototype)
  5. 记录MySQL下所执行的所有命令
  6. Gradient Boost Decision Tree(GBDT)中损失函数为什么是对数形式
  7. 取sql数据乱码_不基于备份和表,生产系统数据误删就能完全恢复
  8. SRV记录注册不成功的可能的原因
  9. Spring Data Jpa中的save和saveAndFlush方法
  10. 那些非常好用的电脑软件
  11. 一、云计算-云平台-国产-华为-FusionSphere+HCIE Cloud相关知识点+笔试题库
  12. 『转』VC 开机自动启动程序代码
  13. matlab:使用4阶龙格库塔方法求解常微分方程组
  14. 你还没有变成真正的孙悟空托世
  15. HP 1022N 网络打印机安装步骤
  16. 成都普赛睿生物医药科技有限公司-IT岗位招聘
  17. 计算机编程语言及C语言简介,编程语言基础:C语言
  18. 6.获取环球时报关键词新闻--动态网页Ajax
  19. java sca_SCA java编码入门
  20. 这样的老板,真想把他拖进WC爆zou一顿.....

热门文章

  1. mac服务器证书失效,Mac OS X Server:软件更新证书过期
  2. pandas数据合并与重塑_PANDAS 数据合并与重塑(concat篇)
  3. html ui 下拉列表,Atitit.ui控件-下拉菜单选择控件的实现select html_html/css_WEB-ITnose...
  4. c语言综合作业答案,C语言作业答案
  5. Visual Studio Code打开项目
  6. 二进制数表示形式:原码、反码与补码
  7. Python学习笔记:集成开发环境
  8. 【BZOJ1911】【codevs1318】特别行动队,斜率优化DP
  9. 16.对极几何——极线约束,收敛相机,平行图像平面,两个立体对 测验_2
  10. 将来时的条件句_58