我正在尝试编写一个基数排序,它使用一个随机数 vector 和一个 vector vector 作为 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;
}
最佳答案
for (int j = 0; j < bins[i].size(); i++)
看起来不对。
我想你的意思是j++
, 不是 i++
.
关于c++ - 在 C++ 中使用 vector 的 vector 进行基数排序会崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8236567/