一步一步写算法(洗牌算法)[建议收藏]

一步一步写算法(洗牌算法)

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

全栈程序员社区此处内容已经被作者隐藏,请输入验证码查看内容
验证码:
请关注本站微信公众号,回复“验证码”,获取验证码。在微信里搜索“全栈程序员社区”或者“www_javaforall_cn”或者微信扫描右侧二维码都可以关注本站微信公众号。

【 声明:版权所有所有,欢迎转载。不用于商业用途。

 联系我们:feixiaoxing @163.com】

    扑克洗牌是我们的生命更喜欢玩游戏。

么我们有没有什么办法自己设计一个扑克牌洗牌的方法呢?在c执行库其中有一个随机函数rand,它能够生成0~32767之间的随意数。那么有没有可能利用这么一个函数对我们扑克牌进行随即洗牌呢?

    在这里我抛砖引玉一下,谈一谈自己眼下已经看到的两个算法。欢迎朋友们谈一谈其它的方法。

    (1)全局洗牌法

    过程例如以下所看到的:

    a)首先生成一个数组,大小为54,初始化为1~54

    b)依照索引1到54。逐步对每一张索引牌进行洗牌,首先生成一个余数 value = rand %54,那么我们的索引牌就和这个余数牌进行交换处理

    c)等多索引到54结束后。一副牌就洗好了

    代码例如以下所看到的:

void get_rand_number(int array[], int length)
{
	int index;
	int value;
	int median;

	if(NULL == array || 0 == length)
		return ;

	/* 每次发牌的时候随意分配待交换的数据 */
	for(index = 0; index < length; index ++){
		value = rand() % length;

		median = array[index];
		array[index] = array[value];
		array[value] = median;
	}
}

    
(2)局部洗牌法

    上面的算法很easy,可是有一个问题,我们发现每次洗牌之后原来洗好的牌都会进行二次操作,个人认为有点说只是去,所以最好还是加以改进:

    a)相同,首先我们生成一个大小为54的数组,数组排列为1~54

    b)索引牌从1開始。到54结束。这一次索引牌仅仅和剩下还没有洗的牌进行交换, value = index + rand() %(54 – index)

    c)等到全部的索引牌都洗好之后,一副牌就弄好了

    代码例如以下所看到的:

void get_rand_number(int array[], int length)
{
	int index;
	int value;
	int median;
	
	if(NULL == array || 0 == length)
		return ;
	
	/* 发牌的时候对于已经分配的数据不再改动 */
	for(index = 0; index < length; index ++){
		value = index + rand() % (length - index);
		
		median = array[index];
		array[index] = array[value];
		array[value] = median;
	}
}

注意: 这两种算法都不是我想出来的。欢迎算法初次接触我的作者,我会加入在文章迹象。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/117838.html原文链接:https://javaforall.net

(0)
上一篇 2021年12月17日 下午9:00
下一篇 2021年12月17日 下午10:00


相关推荐

  • layui table reload 重载

    layui table reload 重载在所有记录中通过姓名搜索需要的数据 nbsp nbsp 搜索记录为空时返回所有记录 nbsp nbsp HTML nbsp 方法渲染 table 表格重载 nbsp reload 将再次访问 servlet 第一次访问 nbsp reload 访问 ennn 然后就是后台操作了 我的方法比较笨拙就不贴代码了 but 还是记录一下思路吧 前面做分页时查询了所有的记录 然后 reload 时获取到了 sN

    2026年3月19日
    2
  • 用Vue高仿qq音乐官网-pc端

    用Vue高仿qq音乐官网-pc端

    2022年3月4日
    50
  • Andriod TV开发之Leanback

    Andriod TV开发之Leanback2019 独角兽企业重金招聘 Python 工程师标准 gt gt gt

    2025年6月13日
    3
  • Lucene分词实现:Analyzer、TokenStream「建议收藏」

    Lucene分词实现:Analyzer、TokenStream「建议收藏」Lucene分词实现(二次开发流程)1.1  分词流程在Lucene3.0中,对分词主要依靠Analyzer类解析实现。Analyzer内部主要通过TokenStream类实现。Tonkenizer类、TokenFilter类是TokenStream的两个子类。Tokenizer处理单个字符组成的字符流,读取Reader对象中的数据,处理后转换成词汇单元。Tokne

    2022年7月22日
    10
  • VRRP协议介绍

    VRRP协议介绍1 VRRP 的工作原理 2 Master 路由器和 Backup 路由器 3 VRRP 报文格式 4 虚拟路由器中的虚拟 IP 地址和虚拟 MAC 地址

    2026年3月19日
    3
  • pycharm 2021永久激活码【最新永久激活】

    (pycharm 2021永久激活码)这是一篇idea技术相关文章,由全栈君为大家提供,主要知识点是关于2021JetBrains全家桶永久激活码的内容IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html2QQ4OQYW6M-eyJsa…

    2022年3月22日
    184

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号