在java中对随机生成的2维数组进行排序?

时间:2015-10-10 21:14:09

标签: java arrays sorting

我正在尝试制作一个程序,在整个数组中按升序打印出一个2维数组。数组中的任何元素都不能在数组中的任何位置重复。您需要做的任何事情才能使其发挥作用。非常感谢。

08 11 14 19 21 22 25
15 22 25 28 32 37 41
20 28 31 32 39 40 48
24 34 41 47 53 54 56
28 37 47 50 57 60 66
29 38 50 57 64 70 71
31 43 52 62 65 75 78

它与followint代码相关但未排序:

public static int[][] getRandomSorted2DArray(int size)
{
    int bigger = (int)Math.pow(2, size) + 1;
    int[][] data = new int[bigger][bigger];
    for (int i = 0; i < data.length; i++)
    {
        for (int j = 0; j < data[0].length; j++)
        {
            data[i][j] = new java.util.Random().nextInt(90);
        }
    }        
    return data;
}

我再次需要这个程序的帮助,但需要两件事 1.按升序对整个数组进行排序 2.不要重复任何其他元素。

1 个答案:

答案 0 :(得分:0)

您可以通过使每个元素至少比最后一个元素大1来生成排序数组:

跟踪最后一个断言值,而不是完全随机的数字,选择lastValue99 - valuesToGo之间的随机数(因此下一个数字仍有空间。 也许这有效:

public static int[][] getRandomSorted2DArray(int size)
{
    int bigger = (int)Math.pow(2, size) + 1;
    int[][] data = new int[bigger][bigger];
    lastValue = 0;
    valuesToGo = data.length * data[0].length;
    for (int i = 0; i < data.length; i++) {
        for (int j = 0; j < data[0].length; j++) {
            data[i][j] = lastValue + 1 + new java.util.Random().nextInt(99 - 1 - lastValue - valuesToGo);
            lastValue = data[i][j];
        }
    }        
    return data;
}

值可能会在100左右分布,但我想如果你愿意,你可以自己解决这个问题。