演算法思路:採用基數排序,用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 為每組測試資料輸出第二小的整數,...