算法_shuffle 洗牌算法 - zen0822/interview GitHub Wiki
洗牌算法
实现流程
-
初始化原始数组和新数组,原始数组长度为n(已知);
-
从还没处理的数组(假如还剩k个)中,随机产生一个[0, k)之间的数字p(假设数组从0开始);
-
从剩下的k个数中把第p个数取出;
-
重复步骤2和3直到数字全部取完;
-
从步骤3取出的数字序列便是一个打乱了的数列。
时间复杂度为O(n*n),空间复杂度为O(n).
使用场景
- 打乱数组顺序
初始化原始数组和新数组,原始数组长度为n(已知);
从还没处理的数组(假如还剩k个)中,随机产生一个[0, k)之间的数字p(假设数组从0开始);
从剩下的k个数中把第p个数取出;
重复步骤2和3直到数字全部取完;
从步骤3取出的数字序列便是一个打乱了的数列。
时间复杂度为O(n*n),空间复杂度为O(n).