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