基数排序功能不适用于基数2?

时间:2017-12-02 22:20:52

标签: c++ radix-sort

我正在编写一个程序,它接受一个整数数组并对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 个答案:

答案 0 :(得分: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来计算权力。浮点计算本质上是不精确的,对于像这样的情况,你无法承受任何误差,你最好在整个计算过程中使用积分值。