2016-03-27 13 views
0

私は整数配列を取ってBucket Sortを使ってソートする必要がある代入に取り組んでいます。Java 2d配列とバケットソート

私の問題は、すでに「バケット」にある要素が既に存在する場合にのみ、次の列に増やそうとするときです。

したがって、下の配列を使用すると、22が最初の要素であり、2行目の0行目に入りますが、それは正しいですが、iを列として使用すると明らかに正しくありません。範囲外のインデックス。

bucketArray列のインデックスを正しく増やす方法については、その位置に要素がある場合にのみ、私は頭をはたくことができません。私は、列を処理するための追加のループを使用してみましたが、どちらも動作しませんでした。

正しい方向へのポインタがあれば幸いです!私はバケットソートを作成する他の方法もあると確信していますが、割り当ては各バケットに2次元配列を使用すると言いましたので、そのように動作させようとしていました。

public class BucketSort { 

    public static void main(String args[]) { 
     int intArray[] = {22, 45, 12, 8, 10, 6, 72, 81, 33, 18, 50, 14}; 
     int eachBucket[][] = new int[10][11]; 
     int j; 
     double max = 81; 
     int min = 6; 
     int divider = (int)Math.ceil((max + 1)/10); 

     for(int i = 0; i < intArray.length; i++) { 
      j = (int)Math.floor(intArray[i]/divider); 
      eachBucket[j][i] = intArray[i]; 
     } 
    } 
} 

答えて

1

あなたはn個より多くを持っている場合は、固定サイズの二次元に問題があるこの

for(int i = 0; i < intArray.length; i++) { 
     j = (int)Math.floor(intArray[i]/divider); 
     eachBucket[j][eachBucket[j][10]] = intArray[i]; 
     eachBucket[j][10]++; 
    } 

のようなもの、使用されているどのように多くの現在のバケット内の要素を追跡するために、11の要素を使用します任意の1つのバケットに入れる要素。おそらくここで問題はないでしょう。

+0

これは問題ではありません。私はちょっと馬鹿だと感じていますが、実際にどのように実際に働いているのかは分かりません。最初の数字(22)を取ると、2行目(j)に移動しますが、columnButton [j] [10]は正確に何ですか?私はプログラミングの初心者であることを覚えておいてください。 – NoobCoderChick

+0

ああ私は見る! eachBucket [j] [10] = 0なら、毎回1を追加します! Brilliant – NoobCoderChick

+0

これはこのようなことをする良い方法ですか?この特定の状況に対して。また、行ごとの最大要素数が11であることが分かっている場合は、カウントを追跡するために追加の列を作成する必要がありますか?あなたはこれまでのような状況に対処しましたか、それともあなたの頭の上から出てきましたか?意味すると、私はそのような考え方をしていないか、プログラムを作成して経験を積んだら自分自身を蹴って、このような問題を解決することができますか? – NoobCoderChick