Python實現(xiàn)返回數(shù)組中第i小元素的方法示例
本文實例講述了Python實現(xiàn)返回數(shù)組中第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即可使循環(huán)不變量繼續(xù)保持;
如果a[j]<=x,則將下標(biāo)i的值加1,并交換a[i]和a[j],再將
j的值加1.此時循環(huán)不變量同樣得到保持'''
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) #生成的隨機數(shù)為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 "腳本之家測試結(jié)果:"
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]#數(shù)組中的第三小的數(shù)
a=sorted(a)
print a
運行結(jié)果:

更多關(guān)于Python相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Python數(shù)組操作技巧總結(jié)》、《Python字符串操作技巧匯總》、《Python函數(shù)使用技巧總結(jié)》、《Python入門與進(jìn)階經(jīng)典教程》及《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》
希望本文所述對大家Python程序設(shè)計有所幫助。
相關(guān)文章
Python+Empyrical實現(xiàn)計算風(fēng)險指標(biāo)
Empyrical 是一個知名的金融風(fēng)險指標(biāo)庫。它能夠用于計算年平均回報、最大回撤、Alpha值等。下面就教你如何使用 Empyrical 這個風(fēng)險指標(biāo)計算神器2022-05-05
Python 3.3實現(xiàn)計算兩個日期間隔秒數(shù)/天數(shù)的方法示例
這篇文章主要介紹了Python 3.3實現(xiàn)計算兩個日期間隔秒數(shù)/天數(shù)的方法,結(jié)合實例形式較為詳細(xì)的分析了基于Python3.3的日期時間轉(zhuǎn)換與運算相關(guān)操作技巧,需要的朋友可以參考下2019-01-01
PyQt5 文本輸入框自動補全QLineEdit的實現(xiàn)示例
這篇文章主要介紹了PyQt5 文本輸入框自動補全QLineEdit的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-05-05

