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

2021-08-10 05:46:07 字數 940 閱讀 4701

用基於比較的排序演算法,先做排序再去取數,時間複雜度最簡是o(nlogn)。

但是有一種方法可以達到o(n)的複雜度,就是遞迴的思想,用快速排序的方法,但是每次都只需要查詢一半。

下面是python實現:

def findnum(a,first,last,dest):

iffirst>=last:

return

a[dest]

i=first

j=last

key=a[i]

while iwhile iand

a[j]>=key:

j-=1

a[i]=a[j]

while iand

a[i]<=key:

i+=1

a[j]=a[i]

a[i]=key

if i==dest:

return

a[i]

elif ireturn findnum(a,i+1,last,dest)

else:

return findnum(a,first,i-1,dest)

順便自己寫乙個全排列進行驗證,輸出陣列的中位數:

def permutation(a,m,n):

if m==n:

print findnum(a,0,len(a)-1,len(a

)//2)

else:

for i in range(m,n):

a[m],a[i]=a[i],a[m]

permutation(a,m+1,n)

a[m],a[i]=a[i],a[m]

可以隨便建乙個陣列進行驗證:

a=[0,1,2,3,4]

permutation(a,0,len(a))

N個數中找出最大的K個數

題目描述 有很多個 n個 無序的數,我們姑且假定它們各不相等,怎麼選出其中最大的若干個 k個 數呢?1.n 100,k 10的時候怎麼處理?2.n 1000,k 100呢?3.n 1億億個,k 100呢?如果這些數是整數的話,怎麼處理?如果是浮點數呢?如果這些數是整數,並且存在上界呢?如果將題目中的...

N個數中找出第k個最大的數 選擇問題

設有一組n個數而要確定其中第k個最大者,稱之為選擇問題。解法一 將n個數鍍金乙個陣列中,再通過某種簡單的演算法,比如氣泡排序法,以遞減順序將陣列排序,然後返回位置k上的元素。執行時間為o n 2 解法二 先把前k個元素讀入陣列並 以遞減的順序 對其排序,接著,將剩下的元素在逐個讀入。當新元素被讀到時...

演算法筆記4 7 求第K大的數

給定乙個長度為n 1 n 1,000,000 的無序正整數序列,以及另乙個數k 1 k 1,000,000 關於第k大的數 例如序列中第3大的數是4。輸入第一行兩個正整數m,n。第二行為n個正整數。輸出第k大的數。樣例輸入 6 31 2 3 4 5 6 樣例輸出4 include include i...