你能在一个数组索引存储多个整数吗?

时间:2012-11-30 01:29:20

标签: java arrays sorting radix

我正在尝试进行基数排序,我看到的一些算法有一个桶数组,它应该将多个整数保存到桶数组的一个索引中,这里是我所指的算法:<登记/>
here is the algorithm I'm referring to

一个索引中是否真的可以有多个整数?怎么样?
或者是否有更简单的基数排序算法?

谢谢!

5 个答案:

答案 0 :(得分:0)

是的,可以向数组添加多个int,但您需要有一个数组,其中每个项目都是Object而不是int

例如......

// the items to store in the array, which contain 3 ints
public class Bucket {
    int number1 = -1;
    int number2 = -1;
    int number3 = -1;

    public void addInt(int number){
        if (number1 == -1){
            number1 = number;
        }
        else if (number2 == -1){
            number2 = number;
        }
        else if (number3 == -1){
            number3 = number;
        }
    }
}

// the array, as used in other classes
Bucket[] bArray = new Bucket[6]; // 6 items in the array, where each item is a Bucket that contains 3 ints

// assigning ints into the array
bArray[2].addInt(56); // add the int '56' to the bucket at index '2' of the array

// You could also use other Array-like structures
ArrayList<Bucket> bList = new ArrayList<Bucket>();

当然,如果你不总是在一个桶中有&lt; = 3项,你可以改变Bucket类使用一个数组或List作为它的变量,而不是单独{{1} }第

你也可以使用多维数组......

int

但是,如果你开始使用不同大小的存储桶,它会变得有点混乱,你需要做更多的错误检查以确保...

  1. 当您尝试访问时,存储桶中的项目不为空
  2. 当您向存储桶添加数字时,您需要检测第二维中的下一个空位置,因此您不会覆盖已存在的// creating the buckets int[][] buckets = new int[6][3]; // assigning ints into the array bArray[2][0] = 56; // add the int '56' to the bucket at index '2' of the array, position '0'
  3. 如果出于这些原因,为什么我建议在多维数组上使用基于对象的数组。

答案 1 :(得分:0)

两种情况创建存储桶

  • 数字不是唯一的
  • 基数排序在每个数字位置上排序(十进制数百,数十,数百)然后再转到下一个 - 所以如果第一个数字上的排序匹配,则为003和019。

第一种情况实际上只是第二种情况的退化情况。

请注意,根据您对数字排序的顺序,有几种基数排序变体。

太回答问题的数据结构部分 - 不,你不能也不会在每个索引上存储多个值。相反,每个桶通常表示为阵列的子序列。然后每个桶由其开始的偏移量表示(结束可以是隐含的)。

答案 2 :(得分:0)

bucket本身就是int[](或List或任何可以存储多个项目的内容)。

你不能把更多的东西放到1个索引中。

int[] array = new array[6];
int value = array[5];
如果有多个int,

将不再有效。

最简单的可能是使用int[][]数组。现在左侧框中的每个索引都指向一个完整的数组。这些数组的长度也可以不同:

Java Jagged Array

答案 3 :(得分:0)

除了将桶表示为List或数组的可能性之外,还可以使用数组切片。在这种情况下,目标数组与输入数组的总大小相同。例如,桶0中有2个元素,桶1中有2个,桶2中有3个,桶3中有1个,桶5中有2个。

Bucket 0 : d[0], d[1]
Bucket 1 : d[2], d[3]
Bucket 2 : d[4], d[5], d[6]
Bucket 3 : d[7]
Bucket 5 : d[8], d[9]

这样做,排序必须跟踪每个桶的下一个索引。

答案 4 :(得分:0)

哇,数组和列表不是实现基数排序的方法。是列表工作,但它减慢了速度,当我这样做时,它比合并排序慢。最好的方法是将每个字节的频率数组实现为计数排序的一部分。我发布了我的代码here,仅用于并行排序。希望它有所帮助。