洗牌算法

算法描述:类似于我们平时玩扑克牌的洗牌过程,将一副未拆封的扑克牌(大小为n的有序数组),通过洗牌打乱排序(变成无重复的随机排列数组)。主要有全局洗牌以及局部洗牌两种思路。


全局洗牌:循环n次,每次循环将第i张牌与牌库中的随机一张牌调换位置。


局部洗牌:循环n次,每次循环将第i张牌与牌库中未洗到的随机一张牌(即牌库中除去前i-1张的剩余牌)调换位置。保证之前已经洗好的牌不会被再次洗到。


Python环境下的实现代码如下:

# coding=utf-8
#洗牌算法

import random


'''定义一副牌'''
card = list(range(1,55))
for i in range(0,len(card)):
    print(card[i])


'''全局洗牌'''
for i in range(0,len(card)):
    value = random.randint(0,len(card)-1) #返回指定范围的一个随机整数,包含上下限
    medin = card[i]
    card[i] = card[value]
    card[value] = medin
print("全局洗牌结果:")
for i in range(0,len(card)):
    print(card[i])


'''局部洗牌'''
for i in range(0,len(card)):
    value = random.randint(i,len(card)-1)
    medin = card[i]
    card[i] = card[value]
    card[value] = medin
print("局部洗牌结果:")
for i in range(0,len(card)):
    print(card[i])

转载于:https://www.cnblogs.com/yucen/p/9343575.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值