博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
算法分析:快速选择
阅读量:4701 次
发布时间:2019-06-09

本文共 1551 字,大约阅读时间需要 5 分钟。

使用类似快速排序的方法,找出第k小的元素。

k从0开始的。

使用了快速排序的部分函数 

//快速选择    template
Comparable& quickSelect(vector
& a, int left, int right, int k) { if (left + 10 <= right)//这个子数组大于10,继续使用快速排序 { Comparable pivot = median3(a, left, right);//枢纽值 int i = left;//i指向左边 int j = right - 1;//j指向右边,现在i和j都是已经比较过的了,等下是先++和-- while (true) { while (a[++i] < pivot) {}//小于枢纽值的元素是一直放在左边,找出一个大的元素 while (pivot < a[--j]) {}//大于枢纽值的元素是一直放在右边,找出一个小的元素 if (i < j) { swap(a[i], a[j]);//i和j还没有交汇,交换位置 } else { break;//这个时候i指向的数是应该比枢纽值大的了 } } swap(a[i], a[right - 1]);//将枢纽值放在i的位置 if (k <= i) { return quickSelect(a, left, i - 1, k);//k在左边的子序列中 } else if(k > i + 1) { return quickSelect(a, i + 1, right, k);//k在右边的子序列中 } else { return a[i]; } } else { //使用插入排序,数组大小小于10的时候 insertionSort(a.begin() + left, a.begin() + right + 1); return a[k];//因为排序是在整个数组里面的,所以第k位置就是所要的值 } } template
Comparable& quickSelect(vector
& a, int k) { return quickSelect(a, 0, a.size() -1, k); }

转载于:https://www.cnblogs.com/fablegame/p/6430199.html

你可能感兴趣的文章
kafka中的消费组
查看>>
python--注释
查看>>
SQL case when else
查看>>
SYS_CONTEXT 详细用法
查看>>
Pycharm配置autopep8让Python代码更符合pep8规范
查看>>
我的第一篇博客
查看>>
【C++算法与数据结构学习笔记------单链表实现多项式】
查看>>
C#垃圾回收机制
查看>>
31、任务三十一——表单联动
查看>>
python之hasattr、getattr和setattr函数
查看>>
maven使用阿里镜像配置文件
查看>>
Copy code from eclipse to word, save syntax.
查看>>
arguments.callee的作用及替换方案
查看>>
P2709 小B的询问
查看>>
PHP echo 和 print 语句
查看>>
第一讲 一个简单的Qt程序分析
查看>>
Centos 6.5下的OPENJDK卸载和SUN的JDK安装、环境变量配置
查看>>
poj 1979 Red and Black(dfs)
查看>>
【.Net基础03】HttpWebRequest模拟浏览器登陆
查看>>
zTree async 动态参数处理
查看>>