求第k大的數

2021-10-07 13:59:40 字數 1238 閱讀 1518

求第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

#include

#include

#include

#include

#include

using

namespace std;

int n[

1000000];

int n;

double

round

(double r)

intquicksort

(int l,

int r)

n[l]

=t;return l;

}int

select

(int l,

int r,

int k)

intmain()

return0;

}

但是如果照演算法筆記的意思是這樣的

#include

#include

#include

#include

#include

using

namespace std;

int n[

1000000];

int n;

double

round

(double r)

intquicksort

(int l,

int r)

n[l]

=t;return l;

}int

select

(int l,

int r,

int k)

intmain()

return0;

}

但是這個答案是錯誤的!錯誤就出在select函式上面,可能是作者筆誤,這個select函式求得的答案是計算第k小的數字而不是第k大的數字!糾正就在第乙個**裡那個select函式,這裡快排得到的答案就是增序的。

而且特坑的就是vs2010的cmath裡沒有round函式,這個要自己新增,抄自

……不會侵權吧?

求第K大的數

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

求第k大的數(武大933)

若是在鍊錶中求倒數第k個的數,可以使用雙指標法。即 設定兩個指標i和j,先讓j先於i走k個位置,然後i和j同時移動,直到j指向最後乙個元素,那麼i指向的即是鍊錶中的倒數第k個元素。program entrance exam description 兩個整數遞增有序序列a,b分別有n個和m個元素,求第...

第k大的數,前k大的數

1 排序後去出前k個,o n log n 如果k2 o nlog k 快排把數分為了兩個部分,所以考慮兩個情況,如果大的部分的個數 k,說明只要繼續在大的部分找就可以了,如果大的部分的個數3 o nlog maxv minv delta 平均為o nlogn 轉化為找第k個,假設最大的數為maxv,...