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

2021-10-02 06:32:42 字數 851 閱讀 7539

給定乙個長度為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

#include

#include

using

namespace std;

const

int maxn =

1000010

;int a[maxn]

;int

randpartition

(int a,

int left,

int right)

a[left]

= temp;

return left;

}void

randselect

(int a,

int left,

int right,

int k)

int p =

randpartition

(a,left,right)

;int m = p - left +1;

if(k == m)

if(k < m)

else

}int

main()

randselect

(a,0

,n-1

,n-m+1)

;return0;

}

ac

求第K大的數

已知 n個數字各不相同,求其中第 k大的數是多少?1 k n 10000 這是一道簡單的試題,我們完全可以套用常用的快速排序模型來解決,即對所有數字進行排序,然後取出第 k大的數字輸出即可,該演算法的時間複雜度為o nlog2n 快速排序的基本思想關鍵在於不斷調整使分治點左邊的數不大於 或不小於 分...

求第k大的數

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

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

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