取出列表中第N大的數

2022-02-15 13:48:53 字數 1035 閱讀 4166

array=list(range(10))

random.shuffle(array)

print

(array)

deffunc1(array,n):

d,k={},n

while k>0:

maxnum,maxindex=-float("

inf"

),0

for index,value in

enumerate(array):

if index not

ind:

if value>=maxnum:

maxnum=value

maxindex=index

d[maxindex]=maxnum

k-=1

return list(d.values())[2]#

因為python現在的版本字典預設是有序的,所以可以這麼用

每次取出乙個最大

方案2,建立乙個小根堆,儲存前三大的資料,時間複雜度nlogk

def

list2bucket(li,i):

buckets=[ for _ in range(10)]

for val in

li:

return

buckets

defbucket2lit(buckets):

li=for bucket in

buckets:

for val in

bucket:

return

lidef

radix_sort(li):

max_val=max(li)

i=0while 10**i<=max_val:

li=bucket2lit(list2bucket(li,i))

i+=1

return

liprint(radix_sort(array)[-3])

基數排序,然後取出第三大的數.假設最大數字數為i,時間複雜度為in

選擇第n大的數

借鑑快速排序演算法,返回每趟確定的乙個元素的位置,與n比較。在快速排序中使用隨機生成的樞軸,如果資料排列均勻,也可以選第乙個數作為樞軸。created by dgm on 2020 1 3.include include include using namespace std int n int a...

列表操作,列表的建立和輸出列表中相同的元素

這裡是用隨機數建立列表的,randint 0,15 為生成0 15內的隨機數,利用列表的推導進行列表的建立 from random import randint l1 randint 0,15 for i in range 10 l2 randint 0,15 for i in range 10 p...

學習筆記47 找出n個數中第k大的數

用基於比較的排序演算法,先做排序再去取數,時間複雜度最簡是o nlogn 但是有一種方法可以達到o n 的複雜度,就是遞迴的思想,用快速排序的方法,但是每次都只需要查詢一半。下面是python實現 def findnum a,first,last,dest iffirst last return a...