三种洗牌算法

来源:互联网 发布:雨松unity3d游戏开发 编辑:程序博客网 时间:2024/06/05 04:49
import java.util.Random;public class Shuffle {/** * @param args */public static void main(String[] args) {// TODO Auto-generated method stubint[] arr = new int[54];int i;for(i = 0; i < 54; i++){arr[i] = i;}shuffle_insert(arr);for(i=0;i<54;i++){System.out.print(arr[i]+" ");}}/* * 每次随机生成两个位置互换(在若干次互换后可能还有一些位置没有被换掉) */private static void shuffle_swap(int[] arr){int i,temp;Random rd=new Random();for(i=0;i<100;i++){int ran1=rd.nextInt(54);int ran2=rd.nextInt(54);temp=arr[ran1];arr[ran1]=arr[ran2];arr[ran2]=temp;}}/* * 每次随机生成一个位置,与第i张牌互换 */private static void shuffle_swap1(int[] arr){int i,temp;Random rd=new Random();for(i = 0; i < 54; i++){int ran=rd.nextInt(54);temp=arr[i];arr[i]=arr[ran];arr[ran]=temp;}}/* * 从第一张牌开始插入,每张牌随机插入其之前的牌中,但是为了避免每次插入都导致之后的 * 位置后移,可以将待插入的牌放在最后,然后与其之前任意位置的牌互换 */private static void shuffle_insert(int[] arr){int i,temp;Random rd=new Random();for(i=1;i<54;i++){temp=rd.nextInt(i);arr[i]=arr[temp];arr[temp]=i;}}}
个人比较喜欢第二种算法,即每次随机生成一个位置,与第i张牌互换,这个的随机性也最好。