已知
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,...