zoukankan      html  css  js  c++  java
  • 洗牌算法

    算法描述:类似于我们平时玩扑克牌的洗牌过程,将一副未拆封的扑克牌(大小为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])
  • 相关阅读:
    虚函数&纯虚函数&抽象类&虚继承
    指针的各式定义
    开源站点
    WCF、Net remoting、Web service概念及区别
    asp.net 分布式应用开发
    C++多重继承二义性解决
    ATL7窗口类详细剖析
    Code review
    GitHub 上100个最受欢迎的Java基础类库
    JAVA基本类库介绍
  • 原文地址:https://www.cnblogs.com/yucen/p/9343575.html
Copyright © 2011-2022 走看看