c++ - 在 C++ 中使用 vector 的 vector 进行基数排序会崩溃

标签 c++ vector radix-sort

我正在尝试编写一个基数排序,它使用一个随机数 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/

相关文章:

c# - 为Unity构建C++插件

c++ - 如何使用 C++ 11 的 using 模板函数关键字来删除作用域中的 namespace

python - 使用 lambdify 将涉及向量转置的表达式转换为数值函数

c - c中的基数排序算法

algorithm - 基数排序是唯一的非比较排序算法吗?

C++ 无法弄清楚如何从用户输入跳转到开关

C++ Xcode iOS 项目错误

c++ - 创建带括号的 std::vector 作为默认大小

c++ - push_back 新元素到 vector

java - Java 基数排序