冒泡排序改一下都能成为一个合理的洗牌算法。。。。

#include <iostream>
static int a[56];
int main()
{char input;for(int i = 0; i < 56; ++i)a[i] = i + 1;   while(std::cin >> input){for(int i = 0; i < 55; ++i)for(int j = 0; j <= i; ++j){if(a[j] + a[j+1] % 2){int temp;temp = a[j + 1];a[j + 1] = a[j];a[j] = temp;   }   }for(int i = 0; i < 56; ++i)std::cout << a[i] << " ";std::cout << std::endl;      }
}

“在算法不公开的情况下,产生一个足够乱的序列。”
或者说虽然是固定算法,但黑盒下难以猜出。

比如54张牌编号0~53后,对于一个初始序列,用冒泡排序。
两个元素交换的条件不是比大小,而是看和是不是2的倍数。
(或者第一轮冒泡看是不是2的倍数,第二轮看是不是3的,如此下去)
诸如此类的条件。

最后得到的序列,不写出代码估计很难弄清楚。

看法:冒泡排序是采用比较大小的方法排序,比较a[i]与a[j]的大小,然后交换位置。

如果把这个比较大小的逻辑更改一下,就可以排列出不同的结果。
比如给定一个常数 int N = 100 比较 a[i] % N 与 a[j] % N的大小,就可以得出一个比较奇怪的序列。

每次运行洗牌程序时,N取不同的数字,第一次100,下一次可以101, 102等等,就可以得到不同的洗牌结果了

总结了了下,可以用以下三种方式:
1.取时间或内存信息,得到的量是随机的,简单的如GetTickCount()%54;
2.使用线程,简单的如开一个线程循环++i,主线程中sleep一段时间(这个时间还可以用i的值来控制,每次sleep时间都不一样,加大了随机性)后,再得到子线程中i的值为随机值;
3.人为干预,简单的比台鼠标滑动、循环运行等待按键得到随机值;

转载于:https://www.cnblogs.com/sooner/p/3263474.html

不使用随机数的洗牌算法相关推荐

  1. C# 之 随机数应用 -- 洗牌算法

    C# 之 随机数应用 -- 洗牌算法 洗牌算法 洗牌算法 这个逻辑很简单却实现了真随机:对于给定的 n 个元素,生成的那个排列,每一个元素都能等概率地出现在每一个位置. 换句话说,每一个位置都能等概率 ...

  2. VB通过洗牌算法生成随机数ID

    Visual Basis开发语言通过洗牌算法生成UUID. 1.在Visual Studio中创建一个桌面应用程序用于代码的测试,点击"洗牌算法"按钮式触发算法运算,并将运算结果回 ...

  3. 我以前用过的一个洗牌算法

    前两天和几个做在线棋牌游戏的朋友聚会,聊到了洗牌算法,正好以前写过一些扑克牌的游戏,中间做了一个洗牌算法,就写了个例子给他们做试验. 基本思路很简单,就是交换法,54张牌排好,随机选择两张牌交换,一般 ...

  4. c++随机打乱数组_【洗牌算法】你确定这样的抽奖算法是随机的?

    洗牌算法在实际应用中使用的比较广泛,比如抽奖.三国杀游戏等等.由于要完全理解洗牌算法存在一定的难度,所以洗牌算法也经常被拿来做算法笔试题.例如以下两个常见的笔试题:在n个不同的数中随机取出不重复的m个 ...

  5. 这或许是讲解Knuth(Shuffle)洗牌算法最好的文章

    1. 前言 看问题,洗牌,显然是一个随机算法了.随机算法还不简单?随机呗.把所有牌放到一个数组中,每次取两张牌交换位置,随机 k 次即可. 如果你的答案是这样,通常面试官会进一步问一下,k 应该取多少 ...

  6. [cocos2dx]斗地主制作之洗牌算法

    做斗地主项目,洗牌算法是一个很重的一步,怎样"洗"的均匀,"洗"的随机,这是非常考究的,算法的优劣就直接会影响效果的好坏.这里我给出一个算法,将0-53这54个 ...

  7. 洗牌算法具体指的是什么

    前言: 这里是修真院前端小课堂,每篇分享文从 [背景介绍][知识剖析][常见问题][解决方案][编码实战][扩展思考][更多讨论][参考文献] 八个方面深度解析前端知识/技能,本篇分享的是: [洗牌算 ...

  8. 三种洗牌算法shuffle

    1. 背景 笔试时,遇到一个算法题:差不多是 在n个不同的数中随机取出不重复的m个数.洗牌算法是将原来的数组进行打散,使原数组的某个数在打散后的数组中的每个位置上等概率的出现,刚好可以解决该问题. 2 ...

  9. shuffle洗牌算法java_洗牌算法shuffle

    洗牌算法 1.   背景 阿里的面试的时候做的一道笔试题:题目:写一个方法,入参为自然数n  (n > 0),返回一个自然数数组,数组长度为n,元素为[1,n]之间,且每个元素不重复,数组中各元 ...

  10. python实现洗牌算法_如何高效而完美地洗牌?用Python做很简单

    Python不用学,看看你就懂:拿来就能用,用用你就会 无需安装编程软件,把代码拷贝到在线编辑器即可运行 考虑一下扑克牌,如何用电脑编程做到高效而完美地洗牌呢? 要求是代码少.效率高,洗牌的结果要同时 ...

最新文章

  1. 数据蒋堂 | SQL是描述性语言?
  2. 区块链BaaS云服务(14)华大BGI区块链“Baas接口“
  3. 三种复方门冬维甘滴眼液的抗菌能力比较
  4. xgboost keras_用catboost lgbm xgboost和keras预测财务交易
  5. vue使用 xterm_为什么我坚持使用xterm
  6. Android Studio Gradle Plugin开发入门指南
  7. mysql执行大量的操作时,报无法连接数据库的错误
  8. linux下查看已经安装的jdk 并卸载jdk的方法
  9. 如何在电脑上登陆多个微信
  10. waitpid status参数介绍
  11. oracle出现ora 12514,ora-12514报错解决方法
  12. 祝朋友生日前程似锦的句子:愿未来锦上添花
  13. C语言求最长公共子序列
  14. 7个无版权图库资源网站,全部高质量且免费,不愁找不到素材
  15. 网页进服务器,如何通过网页进去云服务器
  16. OpenGL制作简易地图(二)
  17. 解读如何打造支撑万亿规模的K8s集群?
  18. 6 生僻字_蔬菜中的生僻字你知道哪些?
  19. 分享:ThinkPad E40无线网卡驱动安装 FOR CENTOS6.3
  20. 利用Hexo+github搭建博客,零成本、无需域名、服务器

热门文章

  1. ES6 Map 数据结构、ES6 箭头函数
  2. java 区间api_Java 常用API(一)
  3. 二、运行盛派的Demo(看下效果)
  4. GUI学习之二十一——QSlider、QScroll、QDial学习总结
  5. C++构造函数(复制构造函数)、析构函数
  6. 第一章数据结构和算法简介
  7. 自然语言处理要解决的问题
  8. OpenSift源代码编译过程记录
  9. Linux下GNOME桌面的安装
  10. VS2013单元测试