求第K大的數

2021-05-17 14:34:52 字數 803 閱讀 3876

已知

n個數字各不相同,求其中第

k大的數是多少?(1≤

k≤n≤10000

)這是一道簡單的試題,我們完全可以套用常用的快速排序模型來解決,即對所有數字進行排序,然後取出第

k大的數字輸出即可,該演算法的時間複雜度為o(

nlog2n

)快速排序的基本思想關鍵在於不斷調整使分治點左邊的數不大於(或不小於)分治點,右邊的數不小於(或不大於)分治點。

一般快速排序,當找到乙個分治點

x,序列就以

x為分治點,分成左右兩部分。

假設每次找到的分治點接近中點,那麼,其演算法的時間代價大致為:

n+n/2+n/4+n/8+…=2n.

也就是說改進後的演算法的時間複雜度為

o(n).

namespace

求第k大的數

console.writeline("

您要尋找第幾大的數?");

k = int.parse(console.readline());

sort(1,n,k); }

static

void sort(int b_low, int b_high, int k)

else }

while (mid < high)

else }

}if (mid == k)

console.writeline(arr[mid]);

else

if (mid < k)

else

if (mid > k)

} }

}

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

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