Функция сортировки 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 здесь, чтобы вычислить полномочия. Вычисления с плавающей запятой по своей сути неточны, и для случаев, подобных этим, когда вы не можете позволить себе никакой погрешности, вам лучше использовать интегральные значения на всем протяжении ваших вычислений.

Другие вопросы по тегам