Python實現(xiàn)返回數(shù)組中第i小元素的方法示例
更新時間:2017年12月04日 11:17:31 作者:愛橙子的OK繃
這篇文章主要介紹了Python實現(xiàn)返回數(shù)組中第i小元素的方法,結合實例形式分析了Python針對數(shù)組的遍歷、排序、運算等相關操作技巧,需要的朋友可以參考下
本文實例講述了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,則將下標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 "腳本之家測試結果:"
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
運行結果:

更多關于Python相關內容感興趣的讀者可查看本站專題:《Python數(shù)組操作技巧總結》、《Python字符串操作技巧匯總》、《Python函數(shù)使用技巧總結》、《Python入門與進階經典教程》及《Python數(shù)據(jù)結構與算法教程》
希望本文所述對大家Python程序設計有所幫助。
相關文章
使用Python實現(xiàn)NBA球員數(shù)據(jù)查詢小程序功能
這篇文章主要介紹了使用Python實現(xiàn)NBA球員數(shù)據(jù)查詢小程序功能,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-11-11
Python協(xié)程asyncio模塊的演變及高級用法
網上很多關于Python協(xié)程asyncio模塊的教程都是基于老版Python的, 本文將以對比方式展示新老Python版本下協(xié)程的寫法有什么不同并總結了asyncio的一些高級用法, 包括如何獲取協(xié)程任務執(zhí)行結果,gather和wait方法的區(qū)別以及如何給任務添加回調函數(shù)。2021-05-05
python使用py2neo創(chuàng)建neo4j的節(jié)點和關系
這篇文章主要介紹了python使用py2neo創(chuàng)建neo4j的節(jié)點和關系,第一步使用py2neo連接neo4j的方法然后根據(jù)dict創(chuàng)建Node,更多相關資料需要的朋友參考下面文章內容2022-02-02

