Java 2d 数组和桶排序

标签 java sorting multidimensional-array bucket-sort

我正在做一项作业,我们需要获取一个整数数组并使用桶排序对其进行排序。

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

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

仅当该位置有一个元素时,我无法理解如何正确增加bucketArray列的索引。我尝试使用一个额外的 for 循环来处理该列,但这也不起作用。

任何正确方向的指示将不胜感激!我确信还有其他方法来创建存储桶排序,但作业表示为每个存储桶使用二维数组,所以我试图让它以这种方式工作。

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个元素来跟踪当前存储桶中有多少个元素已被使用,类似这样

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

关于Java 2d 数组和桶排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36242642/

相关文章:

java - Struts2 JUnit ActionContext 对象

php - 按列对平面文件中的数据进行排序

php - 对可能包含日期和缩写月份名称的字符串数组进行排序

swift - 如何更快速地转置数组?

javascript - 如何将 3d 数组转换为 2d 数组

java - 序列循环

java - 匹配从最后一个不在括号中的大写字母单词开始到字符串末尾的子串

java - 如何使用 java.text.MessageFormat 格式化小数百分比

c++ - 按 STL - C++ 中的成绩对学生列表进行排序?

无法理解 MPI 中的 MPI_Reduce_scatter