Я пытаюсь написать радикальную сортировку, которая использует вектор случайных чисел и вектор векторов для бинов.
Вот код, ошибка где-то в функциях сбора и / или распространения - любая помощь будет оценена, я просто ее не замечаю.Это не дает мне сообщение об ошибке, просто сбой.Вот мой код:
#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;
}