随机化排列数组

这个题比较简单,也是我进百度一面的面试题~

有两种算法:

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)])

这个算法在编程珠玑中也有指出~

你可能感兴趣的:(随机化排列数组)