Python实现线性时间选择算法查找第i小元素
本文介绍使用Python实现线性时间选择算法,用于在数组中查找第i小的元素。通过随机分区策略优化平均性能,代码包含完整的随机选择类定义及测试示例,帮助开发者理解并应用该算法。
本文详细介绍了一种使用Python实现线性时间选择算法的方法,旨在从数组中高效地找出第i小的元素。内容包含完整的代码实现与运行示例,供读者参考学习。
#! /usr/bin/env python
#coding=utf-8
#期望为线性时间的选择算法
import random
class RandomSelect(object):
def Partition(self,a, p, r):
x=a[r]
i=p-1
for j in range(p, r):
'''如果a[j]>x,则只需将j的值加1即可使循环不变量继续保持;
如果a[j]<=x,则将下标i的值加1,并交换a[i]和a[j],再将
j的值加1.此时循环不变量同样得到保持'''
if a[j]<=x:
i=i+1
a[i], a[j]=a[j], a[i]
a[i+1], a[r]=a[r], a[i+1]
return i+1
def RandomPartition(self,a, p, r):
i=random.randint(p, r) #生成的随机数为p=<i<=r
a[r], a[i]=a[i], a[r]
return self.Partition(a, p, r)
def randomSelect(self,a,p,r,i):
if p==r:
return a[p]
q=self.RandomPartition(a,p,r)
k=q-p+1
if i==k:
return a[q]
elif i<k:
return self.randomSelect(a,p,q-1,i)
else:
return self.randomSelect(a,q+1,r,i-k)
if __name__ == '__main__':
print "本站测试结果:"
a=[random.randint(0,20) for i in range(10)]
print a
#a=sorted(a)
#print a
r=RandomSelect()
r.randomSelect(a,0,len(a)-1,3)
print a[2]#数组中的第三小的数
a=sorted(a)
print a
以下是算法的实际运行结果展示:

如需了解更多Python相关知识,建议查阅本站的《Python数组操作技巧总结》、《Python字符串操作技巧汇总》、《Python函数使用技巧总结》、《Python入门与进阶经典教程》以及《Python数据结构与算法教程》等专题文章。
希望上述关于Python程序设计的介绍能为您提供帮助。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









