一、洗牌算法原理:
算法描述:类似于我们平时玩扑克牌的洗牌过程,将一副未拆封的扑克牌(大小为n的有序数组),通过洗牌打乱排序(变成无重复的随机排列数组)。
主要有全局洗牌以及局部洗牌两种思路。
全局洗牌:循环n次,每次循环将第i张牌与牌库中的随机一张牌调换位置。
局部洗牌:循环n次,每次循环将第i张牌与牌库中未洗到的随机一张牌(即牌库中除去前i-1张的剩余牌)调换位置。保证之前已经洗好的牌不会被再次洗到。
二、Python代码实现:
import random
方法一:
def shuffle(lis):
#新列表
result = []
while lis:
#位置
p = random.randrange(0,len(lis))
result.append(lis.pop§)
return result
方法二:
def shuffle(lis):
for i in range(len(lis),0,-1):
p = random.randrange(0,i)
lis.append(lis.pop§)
return lis
方法三:python自带的洗牌函数
lis = [1,2,2,3,3,4,5,10]
random.shuffle(lis)
print(‘洗牌后牌的顺序:’,lis)
本文深入解析了洗牌算法的原理,包括全局洗牌与局部洗牌两种思路,并提供了三种Python实现方式,帮助读者理解如何将有序数组转换为无重复的随机排列。
854

被折叠的 条评论
为什么被折叠?



