您的位置:首页 > 编程语言 > Python开发

学习笔记47-找出n个数中第k大的数

2017-11-02 21:25 162 查看
用基于比较的排序算法,先做排序再去取数,时间复杂度最简是O(nlogn)。

但是有一种方法可以达到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))
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息