Функция сортировки Radix не будет работать для базы 2?
Я пишу программу, которая принимает массив целых чисел и сортирует их по базам 16, 8, 10 и 2. Моя функция работает для всех баз, кроме 2. Она неправильно сортирует числа. Я оглядывался по сторонам и нигде особо не объяснял проблему. Я думаю, что я должен использовать shift (>> <<), но я не знаю точно, как?
void Sortfunc(int myarray[], int n, int base){
queue<int> bins[10];
int MAX=4; // max digits
int COUNTER=0;// position of counter
while (COUNTER < MAX) {
for(int i=0; i<n; i++){// sorts array by digit
int dividor=pow(base,COUNTER);
int temp = myarray[i];
int value = static_cast<int>((temp/dividor)%10); //gets the decimal
bins[value].push(temp);
}
1 ответ
Обратите внимание, что вы все еще жестко закодировали тот факт, что вы работаете в базовой десятке, в своей реализации в двух местах:
queue<int> bins[10]; // <--- Here
int MAX=4;
int COUNTER=0;
while (COUNTER < MAX) {
for(int i=0; i<n; i++){
int dividor=pow(base,COUNTER);
int temp = myarray[i];
int value = static_cast<int>((temp/dividor)%10); // <--- Here
bins[value].push(temp);
}
Это означает, что даже если вы попытаетесь изменить базу, вам не обязательно выполнять сортировку с использованием базы, предоставленной пользователем.
Кроме того, я бы порекомендовал не использовать pow
здесь, чтобы вычислить полномочия. Вычисления с плавающей запятой по своей сути неточны, и для случаев, подобных этим, когда вы не можете позволить себе никакой погрешности, вам лучше использовать интегральные значения на всем протяжении ваших вычислений.