给定N张扑克牌和一个随机函数,设计一个洗牌算法
2016-03-16 14:56
344 查看
package 随机洗牌; import java.util.Random; public class Main { private static void init(int a[]){ for(int i=0;i<a.length;i++){ a[i]=i+1; } } private static void print(int a[]){ for(int i=0;i<a.length;i++){ System.out.print(a[i]+" "); } System.out.println(); } private static void shuffle(int a[]){ int len=a.length; //计算机的随机数并发真正的随机数,而是由一系列的随机函数生成的确定序列 Random random=new Random(System.currentTimeMillis()); for(int i=0;i<len-1;i++){ int pos=random.nextInt(len-i)+i; int tmp=a[i]; a[i]=a[pos]; a[pos]=tmp; } } public static void main(String[] args) throws InterruptedException { int a[]=new int[54]; init(a); shuffle(a); print(a); Thread.sleep(2000); init(a); shuffle(a); print(a); } }
真正的随机概率为 1/n!,即1/n*(n-1)……*(1)
每个位置只有一次选择数的机会
相关文章推荐
- C++中 引用和指针的区别
- C++ 模板
- [随笔]gcc的__attribute__编译属性
- SQL左连接查询和又连接查询的区别
- 在java中生成二维码,并直接输出到jsp页面
- Win8.1+VS2013+WDK8.1+VirtualBox or VMware 驱动开发环境配置
- 解决的方法:warning: Clock skew detected. Your build may be incomplete.
- 当学习前端过程中心态发生了变化
- js插件心得
- MySQL中特有的函数CONV函数
- docker stop 与 docker kill的区别
- Flume架构与源码分析-核心组件分析-2
- iOS取整
- Windows驱动开发如何入门
- 前端入门相关工具
- python学习6 web开发
- response.getWriter()的作用
- Oracle学习笔记(三)
- Java-----隐藏手机号中间四位
- 从VC学习Android·序