洗牌算法

假设有数组A[n],现要打乱元素的顺序,使各个元素等概率地出现在各个位置,称为洗牌操作。

下面是一种简单高效的做法,其思路在从左往右扫描,每次从右侧元素中随机选择一个与当前元素交换位置:

function Shuffle(A, n)
    for i = 0 to n-1
        j = i + rand() % (n - i)
        swap(A[i], A[j])

由于只扫了一遍,时间复杂度为O(n)。

Table of Contents