排序N個比N 7小的數,要求的演算法是O n

2021-05-28 15:08:36 字數 651 閱讀 5541

採用基數排序,用10個桶(vector),每乙個桶用佇列表示(queue),分別代表0-9,然後依次從低位到高位開始將要排序的數倒入桶中,然後再順序取出來,直到排序完成。

若有5個數,12,4,5,130,28

第一次(個位):

0: 130

2: 12

4: 4

5: 5

8 :28

然後順序取出來,130, 12, 4, 5, 28

第二次(十位),沒有十位視作0

0: 4 5

1: 12

2: 28

3: 130

9然後順序取出來,4 5 12 28 130

第三次(百位),沒有百位視作0

0: 4 5 12 28

1: 130

然後順序取出來,4 5 12 28 130

第四次(千位),都為0,退出

擴充套件:若記憶體限制1m,數字無重複,怎麼處理

由於每乙個數小於10^7,若用點陣圖,掃瞄一遍所有數,然後根據位圖輸出即可,位圖所用記憶體不超過1m,可以兩次位圖,先0-499999,再50000-1000000。

在記憶體有限制的情況下,如果採用點陣圖來解決實際問題,而若全部放入位圖,可能導致記憶體使用量比較大。這個時候,我們可以分塊來解決,最後再合併起來,得到最終的結果。

排序N個比N 7小的數,要求的演算法是O n

演算法思路 採用基數排序,用10個桶 vector 每乙個桶用佇列表示 queue 分別代表0 9,然後依次從低位到高位開始將要排序的數倒入桶中,然後再順序取出來,直到排序完成。若有5個數,12,4,5,130,28 第一次 個位 0 130 2 12 4 4 5 5 8 28 然後順序取出來,13...

第n小的醜數

挑戰 獲得乙個醜數很容易,因為醜數可以通過 2x 3y 5z 獲得,同時任意醜數乘以 2 3 5 也是乙個醜數。但是如何獲得第 n 小的醜數呢?當 n 小於等於 6 時,第 n 小的醜數就是 n 本身 但 n 大於 6 時,需要通過前 6 個已知的醜數,從第 7 小的醜數開始計算,一直計算到第 n ...

求n個整數中第二小的數

相同的整數看成乙個數。比如,有5個數分別是1,1,3,4,5,那麼第二小的數就是3。輸入包含多組測試資料。輸入的第一行是乙個整數c,表示有c組測試資料 每組測試資料的第一行是乙個整數n,表示本組測試資料有n個整數 2 n 10 接著一行是n個整數 每個數均小於100 為每組測試資料輸出第二小的整數,...