`
BlogDown
  • 浏览: 214426 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

顺序统计量——求集合中第i小的元素 收藏

 
阅读更多

期望复杂度:0(n)

最坏复杂度:0(n*n)

方法:通过调用快速排序的子程序:random_paration(),根据返回的中枢元素单方向的处理集合中数据。

代码中实现递归和迭代的random_select()。

view plaincopy to clipboardprint?
1 #include <iostream>
2 #include <cstdlib>
3 #include <ctime>
4 using namespace std;
5
6 int random_paration(int *a,int s,int e)
7 {
8 srand(time(NULL));
9 //cout <<"s="<<s<<endl;
10 //cout << "e="<<e<<endl;
11 int r = s+rand()%(e-s+1);//注意:此时的随机数应该是s+rand()%(e-s+1)
12 //cout << "rand = " << r << endl;
13 int tmp = a[r];
14 a[r] = a[e];
15 a[e] = tmp;
16
17 int p = a[e];
18 int l=s,h=e;
19 while(l<h)
20 {
21 while(l<h && a[l]<=p)
22 l++;
23 tmp = a[l];
24 a[l] = a[h];
25 a[h] = tmp;
26
27 while(l<h && a[h]>= p)
28 h--;
29 tmp = a[l];
30 a[l] = a[h];
31 a[h] = tmp;
32 }
33 return l;
34
35
36 }
37 //寻找数组a中第i小的元素
38 //s:数组a的起始位置
39 //e:数组a的结束位置
40 /*递归方法
41 int random_select(int *a,int s,int e,int i)
42 {
43 if(s==e)
44 return a[s];
45 int q = random_paration(a,s,e);//选择中枢元素
46 int k= q-s+1;//a[s,q]的长度
47 if(k==i)//k 正是需要找的元素位置
48 return a[s+k-1];//注意:此时输出元素位置因该是:s+k-1;
49 //return a[q];
50 if(k<i)
51 return random_select(a,q+1,e,i-k);
52 else
53 return random_select(a,s,q-1,i);
54 }
55 */
56 //迭代方法
57 int random_select(int *a,int s,int e,int i)
58 {
59 while(s<=e)
60 {
61 if(s==e)
62 return a[s];
63 if(i> e-s+1)
64 {
65 cout << "error" << endl;
66 return -1;
67 }
68 int q = random_paration(a,s,e);
69 int k = q-s+1;
70 if(k==i)
71 return a[q];
72 if(k<i)
73 {
74 s = q+1;
75 i = i-k;
76 }
77 else
78 {
79 e = q-1;
80 }
81 }
82 }
83 int main()
84 {
85 //int a[10] = {2,4,1,5,4,6,7,4,10,8};
86 //int a[10] = {2,2,2,2,2,2,2,2,2,2};
87 int a[2] = {1,2};
88 int min = random_select(a,0,0,1);
89 cout<<min<<endl;
90 }

分享到:
评论

相关推荐

    计算机二级公共基础知识

    元素ai的存储地址为:ADR(ai)=ADR(a1)+(i-1)k,ADR(a1)为第一个元素的地址,k代表每个元素占的字节数。 (3)顺序表的运算有查找、插入、删除3种。 1.3 栈 1. 栈的基本概念 栈(stack)是一种特殊的线性表,是限定只...

    Splunk_智能运维实战(高清带详细目录书签)

    本书集合了各种实用方法,目的是给读者提供指导和实用知识,以便读者掌握Splunk Enterprise 6的各种功能,从数据中提取出强大而有价值的运维智能。 《Splunk智能运维实战》共10章,第1章介绍将数据导入Splunk的基本...

    asp.net知识库

    帮助解决网页和JS文件中的中文编码问题的小工具 慎用const关键字 装箱,拆箱以及反射 动态调用对象的属性和方法——性能和灵活性兼备的方法 消除由try/catch语句带来的warning 微软的应试题完整版(附答案) 一个...

    Oracle SQL高级编程(资深Oracle专家力作,OakTable团队推荐)--随书源代码

    4.3.2 集合运算中的空值行为 110 4.3.3 空值与GROUP BY和ORDER BY 112 4.3.4 空值与聚合函数 114 4.4 小结 114 第5章 关于问题 116 5.1 问出好的问题 116 5.2 提问的目的 117 5.3 问题的种类 117 5.4 关于...

    亮剑.NET深入体验与实战精要2

    第8章 用户体验的杀手锏—— Ajax 323 8.1 Ajax概述 324 8.1.1 什么是Ajax 324 8.1.2 Ajax技术的核心 325 8.1.3 Ajax的工作原理 326 8.1.4 Ajax的优点 326 8.1.5 Ajax的问题 327 8.1.6 Ajax适用场景 327 8.1.7 Ajax...

    亮剑.NET深入体验与实战精要3

    第8章 用户体验的杀手锏—— Ajax 323 8.1 Ajax概述 324 8.1.1 什么是Ajax 324 8.1.2 Ajax技术的核心 325 8.1.3 Ajax的工作原理 326 8.1.4 Ajax的优点 326 8.1.5 Ajax的问题 327 8.1.6 Ajax适用场景 327 8.1.7 Ajax...

    PLSQLDeveloper下载

    SQL 窗口——该窗口允许您输入任何SQL语句,并以栅格形式对结果进行观察和编辑,支持按范例查询模式,以便在某个结果集合中查找特定记录。另外,还含有历史缓存,您可以轻松调用先前执行过的SQL语句。该SQL编辑器...

    Microsoft SQL Server 2005技术内幕: T-SQ程序设计.pdf

     是Inside Microsoft SQL Server 2005系列书中的第一本,SQL Server类的顶尖之作  全球公认SQL Server 2005经典著作,囊括大量鲜为人知的技术内幕,大师智慧、专家经验尽览无余。   本系列图书中文版得到了微软...

    收获不知Oracle

    2.2.3.2 体系结构中提交的探讨34 2.2.3.3 劳模的评选 38 2.2.3.4 回滚的研究 40 2.2.3.5 一致的查询 43 2.2.3.6 一致读的原理46 2.2.3.7 实践的体会 49 2.3 体系学习让SQL性能提升千倍 65 2.3.1 一起探索体系学习的...

    C语言程序设计标准教程

    为了解决这个问题,C语言中给出了另一种构造数据类型——“结构”。 它相当于其它高级语言中的记录。  “结构”是一种构造类型,它是由若干“成员”组成的。 每一个成员可以是一个基本数据类型或者又是一个构造...

    数据仓库的概念及特点

    在总结、丰富、集中多行企业信息的经验之后,为数据仓库给出了更为精确的定义,即“数据仓库是在企业管理和决策中面向主题的、集成的、与时间相关的、不可修改的数据集合”。 &lt;br&gt;数据仓库并没有严格的数学理论...

    同学的打包代码

    程序运行的初始参数从某个指定的配置文件中读取(该文件名作为第一个参数传递给程序)。配置文件的格式详见范例文件。 学生的初始房间分配情况从某个指定的文件中读取(该文件名作为第二个参数传递给程序)。该文件...

Global site tag (gtag.js) - Google Analytics