您的位置:首页 > 其它

给定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)

每个位置只有一次选择数的机会
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: