バケットソートのコードを記述しようとしていますが、各バケットのバケットサイズで混乱しています。私のコードは以下の通りです。入力配列:{12,11,13,5,6,7,10,22,4,16,1,26}。バケットのバケットサイズでのバケット
私は各バケットのバケットサイズ> 3を渡していますが、並べ替え順に出力を取得しません。バケツサイズ1と2に最適です。
public void bucsort(int[] arr,int bucketSize){
if(arr.length==0) return;
int max=arr[0];
int min=arr[0];
for(int i=0; i<arr.length;i++){
if(arr[i]<min)
{
min=arr[i];
}
else
max=arr[i];
}
int bucketCount= (max - min)/bucketSize + 1;
List<List<Integer>> buckets = new ArrayList<List<Integer>>(bucketCount);
// int divider= (max+1)/bucketCount;
for (int i = 0; i < bucketCount; i++) {
buckets.add(new ArrayList<Integer>());
}
for (int i = 0; i < arr.length; i++) {
buckets.get((arr[i]-min)/bucketSize).add(arr[i]);
}
int currentIndex = 0;
for (int i = 0; i < buckets.size(); i++) {
Integer[] bucketArray = new Integer[buckets.get(i).size()];
bucketArray = buckets.get(i).toArray(bucketArray);
InsertionSort(bucketArray);
for (int j = 0; j < bucketArray.length; j++) {
arr[currentIndex++] = bucketArray[j];
}
}
}
いいえ、バケツとそのサイズの?
max-min関数のメソッドを編集し、プログラムをデバッグしました。私の挿入中にいくつかの間違いの並べ替え
コードがあるようです:
public void InsertionSort(Integer[] arr){
for(int i=1; i<arr.length; i++){
int value=arr[i];
int hole=i;
while(hole>0 && arr[hole-1]>value){
arr[hole]=arr[hole-1];
hole--;
}
arr[hole-1]=value;
}
}
メインFUNC
public static void main(String[] args) {
int arr[] = {12, 11, 13, 5, 6, 7,10,22,4,16,1,26};
BucketSort ob = new BucketSort();
ob.bucsort(arr, 5);
printArray(arr);
}
static void printArray(int arr[])
{
int n = arr.length;
for (int i=0; i<n; ++i)
System.out.print(arr[i] + " ");
System.out.println();
}
バケットサイズ5のための私の出力:5 1 4 6 7 10 12 11 13 16 22 26 サイズ3の場合:1 5 4 6 7 12 10 11 13 16 22 26 サイズ2の場合:1 4 5 6 7 10 12 11 13 16 22 26
ヒント:デバッガを使用することを学ぶおよび/または使用する方法**あなたが行っていることを**観察するためにあなたのコード内のステートメントをトレースしてください。あなたはあなたの前にコードを持っています。それが何をしているのか理解するために必要な唯一のものは、あなたの最後にいくつかの好奇心です(私はバグを狩ることからプログラミングを学ぶので、他の人にそのタスクを委任するわけではありません。そして、もちろん、あなたが尋ねに行くときに聞いてください。その半分だけでなく、関連するすべてのコードを含めてください! – GhostCat
'InsertionSort'メソッドにバグがありますか?私たちはあなたがあなたの質問に異なるバケツサイズ(例えば、サイズ2とサイズ4)の完全なコードと完全な出力を投稿すれば、あなたを助けることができます。 –
これは脇にありますが、最大値を見つける方法は入力例ではうまくいくと思いますが、他の入力では失敗します。 –