【问题标题】:Java 2d array and Bucket sortJava 2d 数组和桶排序
【发布时间】:2016-03-27 00:48:46
【问题描述】:

我正在处理一项任务,我们需要获取一个整数数组并使用桶排序对其进行排序。

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

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

我不知道如何正确增加 bucketArray 列的索引,前提是该位置有一个元素。我尝试使用额外的 for 循环来处理该列,但这也不起作用。

任何正确方向的指针将不胜感激!我敢肯定还有其他方法可以创建存储桶排序,但分配说要为每个存储桶使用 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];
        }
    }
}

【问题讨论】:

    标签: java sorting multidimensional-array bucket-sort


    【解决方案1】:

    使用第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 个元素要放入任何一个桶中。这里可能不是问题。

    【讨论】:

    • 不,在这种情况下这不是问题。我得说,我觉得有点愚蠢,但我并不真正理解这实际上是如何工作的。让我们取第一个数字 (22),它将进入第 2 行 (j),但每个桶 [j] [10] 列到底是什么?请记住我是编程新手哈哈。
    • 哦,我明白了! eachBucket[j][10] = 0,那么你每次都加 1!辉煌
    • 这是做这种事情的好方法吗?对于这种特殊情况。另外,如果我知道每行的最大元素可以是 11,我是否应该创建一个额外的列来跟踪计数?你以前有没有处理过这样的情况,或者你是不是突然想到了这个?意思是,我应该为自己没有这样的想法而自责,还是当你编程和获得经验时,你会更好地解决这样的问题吗?
    • 我不确定我是否会做这个现实世界,但我将其理解为一项编程任务,它确实来自我的头顶......但是带着它一粒盐,我已经编程了一段时间......
    猜你喜欢
    • 1970-01-01
    • 2010-12-03
    • 1970-01-01
    • 2015-06-26
    • 1970-01-01
    • 2019-05-01
    • 1970-01-01
    • 2013-03-14
    • 1970-01-01
    相关资源
    最近更新 更多