当前位置: 首页 > 知识库问答 >
问题:

插入排序无重复值的随机数生成[duplicate]

岳京
2023-03-14

你好,我一直在研究数字集合的插入排序。我可以将它们添加到数组中以执行排序,但是我无法生成具有大量数字的唯一值来执行1000个值的排序(即:e)。我是否有可能生成唯一的随机数来执行排序,而不向数组中添加值?

public class InsertionBinary
{

    public static void main(String Args [])
    {
        int[] nums = {1, 2, 3, 4, 5, 6, 7, 8, 24};
        print(nums);
        insertionsort(nums);
        print(nums);
        int loc = binarySearch(nums, 3);
        System.out.println("2 is in position" + loc);
    }

    private static void swap(int[] list, int from, int to)
    {
        int temp = list[from];
        list[from] = list[to];
        list[to] = temp;
    }

    private static void print(int[] list)
    {
        for (int i = 0; i < list.length - 1; i++)
            System.out.
        print(list[i] + ", ");
        System.out.println(list[list.length - 1]);
    }


    private static void insertionsort(int[] list)
    {
        int key;
        int spot;
        for (int pass = 1; pass < list.length; pass++)
        {
            key = list[pass];
            for (spot = pass - 1; spot >= 0 && list[spot] > key; spot--)
                list[spot + 1] = list[spot];
            list[spot + 1] = key;

        }
    }
}

共有3个答案

左丘成业
2023-03-14

一个简单的解决方案是使用Set生成随机数,并将它们插入集合中,Set不允许重复的数字,比如:

Random rnd= new Random();
Set<Integer> randomSet = new LinkedHashSet<Integer>();
while (randomSet.size() < 1000)
{
    Integer randomNum = rnd.nextInt(max) + 1;
    randomSet.add(randomNum);
}

但是理论上生成这样一个集合可能需要无限的时间,但是它的概率很低。

敖硕
2023-03-14

您可以使用Math.random()并添加一个条件,该条件将检查,数组是否包含该数字,如果不包含则添加,否则不添加。

秦经义
2023-03-14

如果您只需要一组用于排序的唯一数字,我想说最简单的方法是使用循环生成一个大小为N的数组,其中包含数字0到N-1(或1到N,如果您愿意):

int size = 1000;
int[] nums = new int[size];
for(int i = 0; i < size; i++) {
    nums[i] = i;
}

然后你需要做的就是将其洗牌,你可以使用已经实现的swap()方法和以下有用的答案:

数组的随机洗牌

这样做的好处是,它将在O(n)时间内运行(如果你选择随机数,然后只在它们不存在的情况下插入它们,那么它可能是无限时间)。

编辑:您也可以使用Java内置的shuffle方法https://docs.oracle.com/javase/6/docs/api/java/util/Collections.html#shuffle(java.util.列表)

 类似资料:
  • 问题内容: 有人可以帮助我制定一种无需重复在Android中生成随机数的方法吗?最大数量是:这是我的JSON数组。并且返回值应为整数。 我已经拥有的是: 我将方法强制转换了3次,因为我需要3个随机生成的数字。它有效,但是我不知道如何避免重复。因此,这3个数字彼此之间不会相同。 谢谢 问题答案: 您是否尝试过仅使用Math.random()? 只要做一些铸造魔术,您就可以轻松开始了: 编辑: 如果要

  • 如何使随机数发生器不重复数字?我试过这个,但它总是重复给我数字

  • 问题内容: 我想创建一组随机数,在Java中没有重复项。 例如,我有一个数组来存储10,000个从0到9999的随机整数。 这是我到目前为止的内容: 但是上面的代码创建重复项。如何确保随机数不重复? 问题答案: 例如:

  • 如何在1到9之间生成9个随机数,而不重复,一个接一个。它类似于:假设生成的第一个随机数是4,那么下一个随机数必须在[1,9]{4}中。我的第一种方法是将每个随机生成的数字添加到一个集合中,从而避免重复。但在更糟糕的情况下,比如我们已经生成了6个数字,我们必须再生成3个数字,这个过程会有点慢。当范围从[1,9]更改为[1,1000]时,这种方法听起来不正确。有人能提出一个替代方法吗。

  • 问题内容: 我想要一个可以生成值的伪随机序列的函数,但是该序列在每次运行时都可以重复。我想要的数据必须合理地随机分布在给定的范围内,而不必是完美的。 我想根据随机数据编写一些可以对其进行性能测试的代码。我希望每台机器上的每个测试运行的数据都相同,但是出于存储原因,我不想随测试一起运送随机数据(最终可能会变成许多兆字节)。 该模块的库似乎没有说相同的种子在任何机器上总是给出相同的序列。 编辑:如果您

  • 问题内容: 谁能告诉我如何生成不重复的随机数 随机(10)应该(可能)返回3、4、2、1、7、6、5、8、9、10,而无需重复 谢谢 问题答案: 我建议将数字加到,然后使用来随机化其顺序。像这样: