【发布时间】:2012-09-06 08:20:21
【问题描述】:
如果给定一个已排序的数组,我们可以使用什么算法来创建一个输出数组,该数组与已排序的数组具有相同的元素,但元素应该是随机打乱的。我正在寻找一种复杂度为 O(n) 的算法
【问题讨论】:
标签: java random complexity-theory big-o
如果给定一个已排序的数组,我们可以使用什么算法来创建一个输出数组,该数组与已排序的数组具有相同的元素,但元素应该是随机打乱的。我正在寻找一种复杂度为 O(n) 的算法
【问题讨论】:
标签: java random complexity-theory big-o
Collections.shuffle(List) 的时间复杂度为 O(n)。您可以使用Arrays.asList() 包装数组,以便使用此函数。
它的作用是;
对于从最后一个元素到第二个元素的每个元素,将该元素与列表的其余部分(包括其自身)中的一个随机元素交换,即它不能随机移动一个元素。
for (int i=size; i>1; i--)
swap(list, i-1, rnd.nextInt(i));
【讨论】:
您可以使用此代码
// 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
【讨论】: