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

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

    基于快排的选择算法:就是从数组中随机选一个数,比这个数小的放左边,大的放右边,如果放左边的数的个数等于k-1,说明现在选的这个数就是第k大的数。如果放左边的数的个数大于k个,则递归寻找左边的数组中的第k小的元素,找出的这个数,就是原来数组中的第k大元素。 如果放左边的数的个数小于k个,则在右边的数组当中找第k-p-1小的元素(p为左边数组的大小)。

  基于堆的选择算法:维护一个k个元素的最大堆,首先从数组当中取出k个数填入这个堆。然后每次从数组中取出一个元素,和堆顶进行比较。如果比堆顶元素大,则忽略。如果比堆顶元素小,则替换掉堆顶元素,并做一次下滤。

#include 
#include
#include
#include
#include
#include
#include "windows.h"using namespace std;bool cmp(int a,int b){ return a
= end-1) return testData1[start]; int x = start; int tmp = rand()%(end-start)+start; swap(testData1[x],testData1[tmp]); tmp = testData1[x]; int y = end-1; while(x < y){ while (x < y && testData1[y] >= tmp){ y--; } if (x < y){ testData1[x] = testData1[y]; x++; } while (x < y && testData1[x] <= tmp){ x++; } if (x < y){ testData1[y] = testData1[x]; y--; } } testData1[x] = tmp; if (x-start == order-1) return testData1[x]; if (x-start >= order){ return search1(start, x , order); } else{ return search1(x+1 , end , order-(x-start)-1 ); }}//堆方法int search2(int start, int end , int order){ make_heap(&testData2[0],&testData2[order],cmp); for (int i = order ; i < num; i++){ if (testData2[i] < testData2[0]){ pop_heap(&testData2[0],&testData2[order],cmp); testData2[order-1] = testData2[i]; push_heap(&testData2[0],&testData2[order],cmp); } } return testData2[0];}int main(){ srand(time(0)); cout << "k time1 time2"<
 
实验结果:
 

PS:基于快排的算法不稳定,最坏情况是O(n^2)的。在算法导论第9.3节有一个最坏情况为O(n)的选择算法。 

版权声明:本文为博主原创文章,未经博主允许不得转载。

 

你可能感兴趣的文章
EditPlus如何设置保存时不产生.bak备份文件?
查看>>
机器学习到底是什么?
查看>>
吃下这枚安利!翠贝卡电影节上这五部VR视频不容错过
查看>>
phpstorm配置svn
查看>>
Mozilla 回应 Firefox 新建标签页显示广告:只是一项试验功能
查看>>
饿了么CTO张雪峰:允许90后的技术人员“浮躁“一点
查看>>
部署taokeeper
查看>>
Node.js 11.12.0 发布,服务器端的 JavaScript 运行环境
查看>>
二人热热热热热热热热热热热热热热热人
查看>>
用友谢志华:汇集企业云服务,构建云生态
查看>>
Veeam代理解决方案,让可用性永续
查看>>
聊天IM的时间戳显示规则
查看>>
区块链可能颠覆全球商品市场
查看>>
精英云集,看国内外12家顶级公司大数据实践
查看>>
Mac下运行git报错"xcrun: error: invalid active developer path .."
查看>>
AMD将推出双卡交火神油驱动,性能或提高80%
查看>>
django 1.8 官方文档翻译: 3-4-5 内建基于类的视图的API
查看>>
《Scikit-Learn与TensorFlow机器学习实用指南》第13章 卷积神经网络
查看>>
Kali Liunx 2.0震撼来袭(附下载地址、新特性和更新日志)
查看>>
https原理及tomcat配置https方法
查看>>