代码不多,先看效果:

类代码:

 1 static class  ShuffleCards
2 {
3 private static int lastHash = 0;
4 public static void Work(byte[] cards)
5 {
6 if (lastHash == 0)
7 lastHash = System.Environment.TickCount;
8 int len = cards.Length - 2;
9 int mod = 0;
10 byte temp = 0;
11 for (int i = cards.Length - 1; i >= 0 && len>0; i--)
12 {
13 lastHash = (lastHash << 5) - lastHash + i;
14 mod = lastHash < 0 ? lastHash % len * (-1) : lastHash % len;
15 temp = cards[mod];
16 cards[mod] = cards[i];
17 cards[i] = temp;
18 len--;
19 }
20 }
21 }

测试代码:

 1 //16张牌0~F
2 byte[] cards = new byte[16];
3 //洗上99次
4 for (int j = 0; j < 100; j++)
5 {
6 //每次都初始化顺序为 0~F
7 for (int i = 0; i < cards.Length; i++)
8 cards[i] = (byte)i;
9 //洗牌调用
10 ShuffleCards.Work(cards);
11 StringBuilder ret = new StringBuilder();
12 //输出
13 for (int i = 0; i < cards.Length; i++)
14 ret.Append(cards[i].ToString("X") + " ");
15 Console.WriteLine(j.ToString()+" > "+ ret.ToString());
16 }
17 Console.ReadLine();

C#实现不用随机函数(Random)的洗牌算法的更多相关文章

  1. 519. Random Flip Matrix(Fisher-Yates洗牌算法)

    1. 问题 给定一个全零矩阵的行和列,实现flip函数随机把一个0变成1并返回索引,实现rest函数将所有数归零. 2. 思路 拒绝采样 (1)先计算矩阵的元素个数(行乘以列),记作n,那么[0, n ...

  2. 洗牌算法及 random 中 shuffle 方法和 sample 方法浅析

    对于算法书买了一本又一本却没一本读完超过 10%,Leetcode 刷题从来没坚持超过 3 天的我来说,算法能力真的是渣渣.但是,今天决定写一篇跟算法有关的文章.起因是读了吴师兄的文章<扫雷与算 ...

  3. random array & shuffle 洗牌算法 / 随机算法

    random array & shuffle shuffle 洗牌算法 / 随机算法 https://en.wikipedia.org/wiki/Fisher–Yates_shuffle ES ...

  4. C# 洗牌算法

    最近悟出来一个道理,在这儿分享给大家:学历代表你的过去,能力代表你的现在,学习代表你的将来. 十年河东十年河西,莫欺少年穷 学无止境,精益求精   C#洗牌算法如下: class Program { ...

  5. js 随机数 洗牌算法

    function shuffle(arr){ var len = arr.length; for(var i = 0;i<len -1;i++) { var idx = Math.floor(M ...

  6. Fisher–Yates shuffle 洗牌算法(zz)

    1,缘起 最近工作上遇到一个问题,即将一组数据,比如[A,B,C,D,E]其中的两个B,E按随机排列,其他的仍在原来的位置: 原始数组:[A,B,C,D,E] 随机字母:[B,D] 可能结果:[A,B ...

  7. 《Algorithms算法》笔记:元素排序(3)——洗牌算法

    <Algorithms算法>笔记:元素排序(3)——洗牌算法 Algorithms算法笔记元素排序3洗牌算法 洗牌算法 排序洗牌 Knuth洗牌 Knuth洗牌代码 洗牌算法 洗牌的思想很 ...

  8. 洗牌算法shuffle

    对这个问题的研究始于一次在群里看到朋友发的洗牌面试题.当时也不知道具体的解法如何,于是随口回了一句:每次从剩下的数字中随机一个.过后找相关资料了解了下,洗牌算法大致有3种,按发明时间先后顺序如下: 一 ...

  9. 洗牌算法Fisher-Yates以及C语言随机数的产生

    前些天在蘑菇街的面试中碰到一道洗牌的算法题,拿出来和大家分享一下! 原题是:54张有序的牌,如何无序的发给3个人? 这个题是运用经典的洗牌算法完成.首先介绍一种经典的洗牌算法--Fisher-Yate ...

  10. Python洗牌算法重写

    Python有自带的洗牌算法函数shuffle(). 自己也通过学习也琢磨了一下它的实现,然后给出一个时间复杂度O(n),空间复杂度O(4)的例子: import random def shuffle ...

随机推荐

  1. 学习Java Day23

    今天学习了包访问,没有指定public或private的部分可以被同一个包中的所有方法访问

  2. jquery(二:jquery的DOM操作)

    jquery的Dom操作 查找元素(选择器已实现):创建节点对象:访问和设置节点对象的值,以及属性:添加节点:删除节点:删除.添加.修改.设置节点的css样式等. 操作元素的属性: 方法 说明 举例 ...

  3. element plus + vue3表单第一次数据未清空的bug问题解决

    使用框架:element Plus + vue3 场景描述: 场景一: 表单的添加和修改功能,公用同一个弹框,点击修改后,点击添加表单显示的是上次修改的数据. 场景二: 点击修改,数据回显到表单,然后 ...

  4. GoLang 的协程调度和 GMP 模型

    GoLang 的协程调度和 GMP 模型 GoLang 是怎么启动的 关于 GoLang 的汇编语言,请查阅 参考文献[1] 和 参考文献[2] 编写一个简单的 GoLang 程序 main.go, ...

  5. aop中的名词解释

    aop中的名词解释 aop spring Joinpoint(连接点) 目标对象中所有可以增强的方法叫做连接点 Pointcut(切入点) 目标对象中要增强的的方法 Advice(通知/增强) 增强的 ...

  6. 李超树学习笔记 & JZOJ 5039. 【NOI2017模拟4.2】查询题解

    李超树 它本质上是线段树的拓展运用 解决的问题:平面直角坐标系中,支持插入线段,问 \(x = x_0\) 这条直线上最大的 \(y\) 值 它维护的东西很奇特:优势线段 何为"优势线段&q ...

  7. 组织炎症水平高的RA患者接受TNF拮抗剂治疗的效果更好

    组织炎症水平高的RA患者接受TNF拮抗剂治疗的效果更好van der Pouw Kraan TC, et al. Ann Rheum Dis. 2008;67(4):563-6.目的:不同患者对TNF ...

  8. global与nonlocal关键字、函数名的多种用法、函数的嵌套调用、函数的嵌套定义、闭包函数、装饰器简介

    目录 一.global与nonlocal关键字 二.函数名的多种用法 三.函数的嵌套调用 四.函数的嵌套定义 五.闭包函数 六.装饰器简介 一.global与nonlocal关键字 global方法: ...

  9. LeetCode-2013 检测正方形

    来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/detect-squares 题目描述 给你一个在 X-Y 平面上的点构成的数据流.设计一个满足下 ...

  10. 在Unity中对森林植被进行优化

    https://www.163.com/dy/article/DP6665QP0526E124.html