0

我正在尝试编写一个基数排序,它使用一个随机数向量和一个向量向量作为 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;

}
4

2 回答 2

1

for (int j = 0; j < bins[i].size(); i++)看起来不对。

我想你的意思是j++,不是i++

于 2011-11-23T02:20:38.517 回答
1

bins中的向量中没有足够的空间distribute。将其开头更改为:

bins.clear();

int modder = place * 10;

bins.resize(modder);

向量会在向其添加项目时自动调整大小,但如果不调整其大小,则无法访问超出向量大小的项目。

于 2011-11-23T02:43:42.470 回答