这个题比较简单,也是我进百度一面的面试题~
有两种算法:
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)])