我正在尝试编写一个基数排序,它使用一个随机数向量和一个向量向量作为 bin。
这是代码,错误在收集和/或分发函数中的某个地方 - 任何帮助将不胜感激,我只是没有发现它。它没有给我一条错误消息,只是崩溃了。这是我的代码:
#include <iostream>
#include <vector>
#include <ctime>
using namespace std;
void distribute(vector<int> & myList, vector< vector<int> > & bins, int place);
void gather(vector<int> & myList, vector< vector<int> > & bins);
int getNumDigits(vector<int> myList);
int main(){
int place = 1;
vector<int> myList(20);
vector< vector<int> > bins;
//initialize the vector
srand((unsigned)time(0));
for (int i = 0; i < myList.size(); i++){
myList[i] = rand() % 300;
}
//get mumber of digits of largest
place = getNumDigits(myList);
cout << "Unsorted list: " << endl ;
for (int i = 0; i < myList.size(); i++){
cout << myList[i] << " ";
}
distribute(myList, bins, place);
gather(myList, bins);
cout << endl << "Sorted once " ;
for (int i = 0; i < myList.size(); i++){
cout << myList[i] << " ";
}
system("pause");
return 0;
}//end main
void distribute(vector<int> & myList, vector< vector<int> > & bins, int place){
bins.clear();
int modder = place * 10;
for (int i = 0; i < myList.size(); i++){
bins[(myList[i]) % modder].push_back(myList[i]);
}//endfor (myList[i]) % modder
}//end distribute
void gather(vector<int> & myList, vector< vector<int> > & bins){
for (int i = 0; i < 10; i++){
for (int j = 0; j < bins[i].size(); j++){
myList.push_back(bins[i][j]);
}//end inner
}//end outer
}
int getNumDigits(vector<int> myList){
int place = 0;
int biggest = 0;
for (int i = 0; i < myList.size(); i++){
if (myList[i] > biggest)
biggest = myList[i];
}
while (biggest > 0){
place++;
biggest = biggest / 10;
}
return place;
}