一个简单,公平,时间复杂度为 O(n)的洗牌算法。
什么是洗牌算法呢?其实就是将一些数据以公平随机的方式打乱顺序。这个算法,是由 Knuth(高纳德),也就是计算机程序设计艺术的作者发明的。下面我们直接进入正题。
假设有这样一个数组 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],我们使用 Knuth-Shuffle 算法将数据打乱。基本流程是这样的,从最后一个数开始,往前遍历,每一次,从当前数和第 1 个数之间,随机选择一个数,与当前数字进行交换(这里的随机选择就直接使用程序语言中的 Random 随机一个索引即可)。