最近期末课程设计,有一题要求对N个0-999的数字进行基数排序,以前并没有听说过这种排序,在百度看了相应的原理之后,动手写了以下基数排序的代码出来,特此分享给大家。
代码中使用了C++ STL的vector以及queue,以此简化实现方法。
#include<iostream>
#include<vector>
#include<fstream>
#include<ctime>
#include<queue>
using namespace std;
const int N = 1000;
vector<queue<int>> container(10);
vector<int> orderArray;
void random(){ //随机生成数字
srand(unsigned(time(NULL)));
ofstream fout("out.txt");
for(int i=0;i<N;i++){
int num = rand()%1000;
fout << num <<endl;
// cout << num <<endl;
orderArray.push_back(num);
}
fout.close();
}
void RadixSort(){
for(int m = 0;m<3;m++){
for(int i=0;i<orderArray.size();i++){
int temp = orderArray[i];
for(int j=0;j<m;j++) temp/=10; //取个位、十位、百位
container[temp%10].push(orderArray[i]); //按上述位数投入相应容器
}
orderArray.clear(); //清空初始数组
for(int i=0;i<10;i++){ // 将容器内的数按次序收集下来
while(!container[i].empty()){
orderArray.push_back(container[i].front());
container[i].pop();
}
}
}
}
void printArray(){
ofstream fout("result.txt");
for(int i=0;i<orderArray.size();i++){
cout << orderArray[i] <<endl;
fout << orderArray[i] <<endl;
}
fout.close();
}
int main(){
random();
RadixSort();
printArray();
}
发表评论
沙发空缺中,还不快抢~