这个题比较简单,也是我进百度一面的面试题~
有两种算法:
PERMUTE-BY-SORTING算法:
PERMUTE-BY-SORTING(A)
n = length[A];
for i = 1 to n
do P[i]=RANDOM(1, n^3);
sort A, using P as sort keys
return A
优先级数组为什么是RANDOM(1, n^3),原因是尽量避免生成重复的key,如果存在重复的key怎么办,对于不重复的key优先级排序,重复的key则重新生成key,继续优先级排序。
第二种方法也就是推荐的方法,原地生成
RANDOMIZE-IN-PLACE(A)
n = length[A];
for i = 1 to n
swap(A[i], A[RANDOM(i, n)])
这个算法在编程珠玑中也有指出~