本文實例講述了Python實現返回數組中第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即可使循環不變量繼續保持; 如果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程序設計有所幫助。
新聞熱點
疑難解答