Fisher–Yates shuffle 洗牌算法
Fisher–Yates shuffle 算法是一个用来将一个有限集合生成一个随机排列的算法(数组随机排序)。这个算法生成的随机排列是等概率的。同时这个算法非常高效。
算法的复杂度是O(n),伪代码如下:
-- To shuffle an array a of n elements (indices 0..n-1):
for i from n−1 downto 1 do
j ← random integer such that 0 ≤ j ≤ i
exchange a[j] and a[i]
这里列举一个例子,根据每次迭代次数可以用下面的表格,描述这个算法的执行过程,如下:
总之,Fisher–Yates shuffle 算法是一个非常高效又公平的随机排序算法,如果有随机排序数组的需求就使用这个算法比较好。