採用基數排序,用10個桶(vector),每一個桶用隊列表示(queue),分別代表0-9,然後依次從低位到高位開始將要排序的數倒入桶中,然後再順序取出來,直到排序完成。
若有5個數,12,4,5,130,28
第一次(個位):
0: 130
1
2: 12
3
4: 4
5: 5
6
7
8 :28
9
然後順序取出來,130, 12, 4, 5, 28
第二次(十位),沒有十位視作0
0: 4 5
1: 12
2: 28
3: 130
4
5
6
7
8
9
然後順序取出來,4 5 12 28 130
第三次(百位),沒有百位視作0
0: 4 5 12 28
1: 130
2
3
4
5
6
7
8
9
然後順序取出來,4 5 12 28 130
第四次(千位),都爲0,退出
擴展:若內存限制1M,數字無重複,怎麼處理
由於每一個數小於10^7,若用位圖,掃描一遍所有數,然後根據位圖輸出即可,位圖所用內存不超過1M,可以兩次位圖,先0-499999,再50000-1000000。
在內存有限制的情況下,如果採用位圖來解決實際問題,而若全部放入位圖,可能導致內存使用量比較大。這個時候,我們可以分塊來解決,最後再合併起來,得到最終的結果。