【问题标题】:Shuffling a sorted array洗牌一个排序的数组
【发布时间】:2012-09-06 08:20:21
【问题描述】:

如果给定一个已排序的数组,我们可以使用什么算法来创建一个输出数组,该数组与已排序的数组具有相同的元素,但元素应该是随机打乱的。我正在寻找一种复杂度为 O(n) 的算法

【问题讨论】:

    标签: java random complexity-theory big-o


    【解决方案1】:

    Collections.shuffle(List) 的时间复杂度为 O(n)。您可以使用Arrays.asList() 包装数组,以便使用此函数。

    它的作用是;

    对于从最后一个元素到第二个元素的每个元素,将该元素与列表的其余部分(包括其自身)中的一个随机元素交换,即它不能随机移动一个元素。

    for (int i=size; i>1; i--)
        swap(list, i-1, rnd.nextInt(i));
    

    【讨论】:

      【解决方案2】:

      您可以使用此代码

          // Create a list
          List list = new ArrayList();
          // Add elements to list
          // Shuffle the elements in the list
          Collections.shuffle(list);
          // Create an array
          String[] array = new String[] { "a", "b", "c" };
          // Shuffle the elements in the array
          Collections.shuffle(Arrays.asList(array));
      
          for (int i = 0; i < array.length; i++) {
              System.out.println("Count is: " + i + " letter is " + array[i]);
          }
      

      这将打印如下内容:

      计数是:0 个字母是 b

      计数是:1 个字母是一个

      计数是:2 个字母是 c

      来自http://www.exampledepot.com/egs/java.util/coll_Shuffle.html

      【讨论】:

        猜你喜欢
        • 2014-02-23
        • 1970-01-01
        • 1970-01-01
        • 2012-03-13
        • 2013-08-30
        • 1970-01-01
        • 2015-04-15
        • 1970-01-01
        相关资源
        最近更新 更多