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

2021-06-22 18:50:05 字數 904 閱讀 4106

演算法思路:採用基數排序,用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,退出

#include#include#include#includeusing namespace std;

size_t n; //n 個數

size_t maxlen=0; //最大的數字位數

vector< queue> vec(10); //10個桶,每個桶內是個佇列

vectorresult;

void sort()

result.clear();

for(size_t k=0;k>n;

string input;

for (size_t i=0;i>input;

result.push_back(input);

if(maxlen==0||input.length()>maxlen)

maxlen=input.length();

} sort();

for(i=0;i

排序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 然後順序取出來,130,12,4...

第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 為每組測試資料輸出第二小的整數,...