2017-12-02 22 views
-2

我正在写一个程序,它接受一个整数数组并将它们排序为基数16 8 10和2.我的函数适用于除2之外的所有基数。它不能正确地对数字进行排序。我一直在环顾四周,没有地方特别解释这个问题。我认为即时通讯应该使用移位(>> < <),但我不知道如何?基数2的基数排序功能不起作用?

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); 
    } 
+0

没有看到你的代码我不认为我们可以给你很多建议。你能发布你有什么和你得到的具体错误吗? – templatetypedef

+0

我得到的错误是,当我输入基数2时,数组没有正确排序。对于所有其他基数工作正常。 – G3Spin

+0

是否有任何理由你不会使用'std :: sort'? –

回答

0

注意,你仍然硬编码的事实,你在基地十个工作到您实施两个景点:

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来计算能力。浮点计算本质上是不精确的,对于这些您无法承受任何误差范围的情况,您最好在整个计算过程中使用整数值。