找一个无序数组第m大的数的算法
来源:互联网 发布:dwg文件打印软件 编辑:程序博客网 时间:2024/06/05 22:31
在一个个数为n的无序数组中找第m大的数,基本思想无非还是排序的思想,只不过需要我们稍微对现有的排序算法做些改动。
首先最简单的冒泡,插入排序,我们可以先直接排序,然后遍历到第m大的数,这个复杂度应该就是O(n^2),稍微想一下,我们好像还可以只维护一个大小为m的数组用来存储前m大的数,这样复杂度就降低了一些,变成了O(n*m)。关于冒泡,插入,至今我只想出这两个算法,如有其他好的算法欢迎分享。
接下来是堆排序,根据堆排序的过程,显示初始化O(n),然后重复一个过程,就是 1,取堆顶,2,产生新的堆顶。 这样我们当找到第m大的书以后,以后就不用再找了,所以,对于堆排序,我们的算法复杂度可以降到O(k*logn)。
最后是利用快排的思想,我们知道快排是在每一层都是排n个数,既然我们这里要求求第m大的数,所以其他的数的顺序我们就不关心了,因此,我们每一次排完一层以后,先拿着中间数(就是快排中将数组分成两部分的那个数)的位置与m比较是大是小,然后抛弃一边,只排剩下的一边,这样我们的算法的时间复杂度就大大降低。
假设k=logn,那么在我们快排算法的理想环境下,我们发现我们的时间复杂度是O(1+2+4+....+2^k),也就是O(2*n)=O(n)。
因此,我们发现在求一个无序数组的第m大的数时,可以做出比排序更好的算法,而我目前所能想到的最好的算法就是利用快排思想的那个算法。
0 0
- 找一个无序数组第m大的数的算法
- 无序数组找第k小的数
- 找一个数组中第K大的数
- 【题目25】求一个无序数组的第nth大的数
- 【滴滴笔试】利用快排找到一个无序的数组中的第K大的数
- 无序数组找出其中的第K大的数
- 面试题—— 找出一个无序整型数组中第k大的数。
- 求无序数组第K大的数
- 寻找无序数组中第k大的数
- 在无序数组中找到第k大的数
- 输入一个无序序列,输出第K大的数。
- 一个无序数组中第K大的元素
- 算法思想:关于找数组中第K大的数的思考
- java 实现从无序数组中 找出第k大的数, 无序数组充许有重复元素
- 找到N个无序数中第M大的数
- 找数组中第k大的数
- 两个有序数组找第k大的数
- 找到整数数组中第m大的数
- 火星人敏捷开发1001问
- OpenCV + VS2012 打开图像/图像文件
- CentOS 6.5 安装Oracle11g R2
- 提升UITableView性能-复杂页面的优化
- Linux(Ubuntu)下安装Android设备的ADB/USB驱动
- 找一个无序数组第m大的数的算法
- 日经社説 20150316 難民に冷たい国でいいのか
- VMWare中的Host-only、NAT、Bridge的比较
- Linux命令8——cp
- android service getIntent
- CentOS简单命令:date cal bc
- RSA加密算法
- iOS 里的MVC
- javascript new Date()函数在不同浏览器上返回不同的值