本文實例講述了Python實現(xiàn)返回數(shù)組中第i小元素的方法。分享給大家供大家參考,具體如下:
#! /usr/bin/env python#coding=utf-8#期望為線性時間的選擇算法import randomclass 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) #生成的隨機(jī)數(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 "VEVB武林網(wǎng)測試結(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é)果:

希望本文所述對大家Python程序設(shè)計有所幫助。
新聞熱點
疑難解答
圖片精選