您的位置:首页 > 其它

基数排序

2015-09-29 17:12 260 查看
基数排序:

#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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: