java基础

Fisher-Yates-Knuth洗牌算法

2020-10-12  本文已影响0人  茶还是咖啡

给定一副扑克牌,要求将排均匀的打乱


算法思路:

  1. 将扑克牌依次存储到数组中,将数组分成两部分,前半部分是已经打乱顺序的,后半部分是没有打乱顺序的,初始情况下,打乱顺序的部分长度为0。


  2. 从有序的牌中随机选择一张并与有序部分的第一张牌进行交换,打乱部分长度加1,没有打乱部分长度减1。



    3.依次重复上面第二步的动作,直到没有打乱部分长度为0,此时,洗牌完毕。



编码实现

   void shuffle(int[] arr){
        Random random = new Random();
        for(int i = 0;i<arr.length;i++){
            int x = random.nextInt(arr.length-i)+i;
            int t = arr[i];
            arr[i] = arr[x];
            arr[x] = t;
        }
    }
上一篇下一篇

猜你喜欢

热点阅读