基数排序:
#include <iostream>
#include <queue>
#include <vector>
#include <ctime>
#include <cstdio>
#include <cstdlib>
using namespace std;
#define MAXN 100 // number of entry to sort
#define c 100000 // the entry used to sort is of [0, c)
unsigned long ulrand(void) { // generate rand entry
return (
(((unsigned long)rand()<<24)&0xFF000000ul) // ul means unsigned long
|(((unsigned long)rand()<<12)&0x00FFF000ul)
|(((unsigned long)rand() )&0x00000FFFul));
}
void RadixSort(vector<int>& v, int MaxLen){
queue <int> digit_bin[10]; //is used to carry 0~9
int digit = 1;
for(int num_of_digit = 0; num_of_digit < MaxLen; num_of_digit++){ // MAX length of num is 6
for(int i = 0; i < v.size(); i++){
digit_bin[ (v[i] / digit) % 10 ].push(v[i]);
}
int index = 0;
for(int i = 0; i < 10; i++)
while( !digit_bin[i].empty() ){
v[index++] = digit_bin[i].front();
digit_bin[i].pop();
}
digit *= 10;
}
}
int main(){
int num;
srand(time(0));
vector<int> v;
for(int i = 0; i < MAXN; i++){
num = ulrand()%c; // num of [0, c), MAXLen is 6 digits
v.push_back(num);
}
RadixSort(v, 6);
for(int i = 0; i < v.size(); i++)
cout << v[i] << endl;
return 0;
}