Java 2d数组和Bucket排序



我正在处理一个赋值,我们需要取一个整数数组,并使用Bucket sort.对其进行排序

我的问题出现在试图增加到下一列时,但前提是"bucket"中已经有一个元素。

因此,使用下面的数组,22是第一个元素,将进入第2行第0列,这是正确的,但使用i作为列显然是不正确的,因为它总是增加列,我最终得到一个超出界限的索引。

我无法理解如何正确地增加bucketArray列的索引,只有在该位置有元素的情况下。我尝试过使用一个额外的for循环来处理列,但也不起作用。

任何指向正确方向的指针都将不胜感激!我相信还有其他方法可以创建bucket排序,但任务规定每个bucket使用一个2d数组,所以我试图让它以这种方式工作。

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];
        }
    }
}

使用第11个元素来跟踪当前bucket中使用了多少元素,类似于以下

   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]++;
    }

固定大小的第二维度的问题是,如果要将n个以上的元素放入任何一个桶中。这里可能不是问题。

最新更新