问题描述:给定序列A,输出序列A‘,要求A’中各元素的位置随机化
1.构造一个随机数组,使用该数组元素作为key排序数组A
1 SHUFFLE(A) 2 n = length of A 3 create array R[n] 4 for i = 0, n-1 5 R[i] = RANDOM_INT(n^3) //采用n^3是为了减少key的冲突 6 SORT A with R as keys
时间复杂度:O(n+nlgn) = O(nlgn)
空间复杂度: O(n)
2.遍历序列A,将该位置元素与数组中随机位置的其他元素交换
1 SHUFFLE(A) 2 n = length of A 3 for i = 1 to n-1 4 do 5 swap A[i] A[RANDOM(0,i+1)]
时间复杂度:O(n)
空间复杂度:O(1)
STL中random_shuffle算法采用2的实现方式
原文地址:http://www.cnblogs.com/stormli/p/shuffle.html