学习笔记47-找出n个数中第k大的数
2017-11-02 21:25
162 查看
用基于比较的排序算法,先做排序再去取数,时间复杂度最简是O(nlogn)。
但是有一种方法可以达到O(n)的复杂度,就是递归的思想,用快速排序的方法,但是每次都只需要查找一半。
下面是python实现:
顺便自己写一个全排列进行验证,输出数组的中位数:
可以随便建一个数组进行验证:
但是有一种方法可以达到O(n)的复杂度,就是递归的思想,用快速排序的方法,但是每次都只需要查找一半。
下面是python实现:
def findNum(a,first,last,dest): if first>=last: return a[dest] i=first j=last key=a[i] while i<j: while i<j and a[j]>=key: j-=1 a[i]=a[j] while i<j and a[i]<=key: i+=1 a[j]=a[i] a[i]=key if i==dest: return a[i] elif i<dest: return findNum(a,i+1,last,dest) else: return findNum(a,first,i-1,dest)
顺便自己写一个全排列进行验证,输出数组的中位数:
def permutation(a,m,n): if m==n: print findNum(a,0,len(a)-1,len(a)//2) else: for i in range(m,n): a[m],a[i]=a[i],a[m] permutation(a,m+1,n) a[m],a[i]=a[i],a[m]
可以随便建一个数组进行验证:
a=[0,1,2,3,4] permutation(a,0,len(a))
相关文章推荐
- 47、我的C#学习笔记13
- 主席树初步学习笔记(可持久化数组?静态区间第k大?)
- IOS学习笔记47--UIApplication深入研究
- Java学习笔记47. 子类中对父类方法的覆盖
- JAVA学习笔记47——其他容器简介4:guava之MulitiSet、MultiMap、BiMap、Table
- 《剑指Offer》学习笔记--面试题47:不用加减乘除做加法
- [置顶] iOS学习笔记47——图片异步加载之EGOImageLoading
- 学习笔记--函数式线段树(主席树)(动态维护第K极值(树状数组套主席树))
- CUBRID学习笔记 47 show
- 学习笔记--函数式线段树(主席树)(动态维护第K极值(树状数组套主席树))
- OpenCV学习笔记3:找出人脸,同时比较两张图片中的人脸相似度
- ES权威指南[官方文档学习笔记]-47 Partial updates to a document
- OpenCV学习笔记3:找出人脸,同时比较两张图片中的人脸相似度
- c语言学习笔记47
- iOS学习笔记47——图片异步加载之EGOImageLoading
- iOS学习笔记47-Swift(七)泛型
- 【算法学习笔记】47.高精度x低精度 组合数学 杨辉三角 SJTU OJ 3003 Strange Mushroom
- Git学习笔记4 找出最懒的程序员
- iOS学习笔记47-Swift(七)泛型