2017-12-02 81 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來計算能力。浮點計算本質上是不精確的,對於這些您無法承受任何誤差範圍的情況,您最好在整個計算過程中使用整數值。