2017-12-02 12 views
-2

私は整数の配列を取り、それらを基数16 8 10と2のためにソートするプログラムを書いています。私の関数は2以外のすべての基底で機能します。私は周りを見回していて、問題を特に説明する場所はありません。私はシフト(>> < <)を使用すると思いますが、正確にはわかりません。あなたはまだあなたが2つのスポットであなたの実装にベース10で作業しているという事実をハードコーディングされてきた基数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を使用しないでください。浮動小数点計算は本質的に不正確です。誤差の余裕がない場合には、計算の途中で積分値を使用する方がよいでしょう。

関連する問題