一、洗牌算法原理:
算法描述:类似于我们平时玩扑克牌的洗牌过程,将一副未拆封的扑克牌(大小为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)