005_010 Python 選擇序列中最小的第n個元素
阿新 • • 發佈:2018-12-30
程式碼如下:
#encoding=utf-8 print '中國' #選擇序列中最小的第n個元素 #如果序列很長 ,而且洗牌很充分 排序的複雜度為logn 下面為O(n)的演算法 最小元素師第0個 獲取第n個最小的 import random def seln(data,n): data = list(data) if n < 0: n += len(data) if not 0 <= n <= len(data): return None while True: pivot=random.choice(data) pcount=0 under,over=[],[] underappend,overappend=under.append,over.append #重要優化,python不會再內層中快取結果 for elem in data: if elem < pivot: underappend(elem) elif elem > pivot: overappend(elem) else: pcount += 1 numunder = len(under) if n < numunder: data = under elif n < numunder + pcount: return pivot else: data = over n -= numunder + pcount data=[2,3,4,5,71,18,10,3,5,7] print seln(data,8)
列印結果如下:
中國
18