代码不多,先看效果:

类代码:

 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. unity 实现自定义class深度拷贝 deep copy 深度复制 引用类型复制

    气死我了,搜半天没有,全让序列化再反序列化,又不方便又不美观.结果自己试着一写就通,两行完事. 首先先安装Newtonsoft.Json 包,这个很常用也很简单,随便搜一下安上就行,早晚得学. 然后两 ...

  2. 2.3.pages.json文件的页面配置与全局配置

    新建页面 # pages uni-app 通过 pages 节点配置应用由哪些页面组成,pages 节点接收一个数组,数组每个项都是一个对象,其属性值如下: 属性 类型 默认值 描述 path Str ...

  3. P14_协同工作-开发者的权限说明以及如何维护项目成员

    不同项目成员对应的权限 开发者的权限说明 开发者权限:可使用小程序开发者工具及对小程序的功能进行代码开发 体验者权限:可使用体验版小程序 登录权限:可登录小程序管理后台,无需管理员确认 开发设置:设置 ...

  4. .NET Core 日志记录程序和常用日志记录框架

    本文主要内容为.NET Core的日志记录程序和常使用的日志记录框架的简单使用 首先,打开VS2019新建一个ASP.NET Core Web Api项目,项目创建好后会有一个集成好的天气预报的类和控 ...

  5. uboot启动过程 3

    uboot启动过程1描述到 _start -> reset ->  save_boot_params -> save_boot_params_ret ->  cpu_init_ ...

  6. Java 优化:读取配置文件 "万能方式" 跨平台,动态获取文件的绝对路径

    Java 优化:读取配置文件 "万能方式" 跨平台,动态获取文件的绝对路径 每博一文案 往事不会像烟雾似的飘散,将永远像铅一般沉重地浇铸在心灵的深处. 不过,日常生活的纷繁不会让人 ...

  7. rin和快速迭代

    链接:https://ac.nowcoder.com/acm/contest/3002/E rin最近喜欢上了数论. 然而数论实在太复杂了,她只能研究一些简单的问题. 这天,她在研究正整数因子个数的时 ...

  8. pat乙级1023 组个最小数

    #include <stdio.h> #include <stdlib.h> #include <string.h> #include <math.h> ...

  9. SQLServer 编程总结

    case的用途 case语句有四个关键字,缺一不可,分别是:case when then end,另外还有一个else.case 后面跟字段名(当在when后面出现字段名时,case里不能写出来),w ...

  10. 两行CSS让页面提升了近7倍渲染性能

    参考:https://juejin.cn/post/7168629736838463525 content-visibility.contain-intrinsic-size属性