美文网首页java基础
Fisher-Yates-Knuth洗牌算法

Fisher-Yates-Knuth洗牌算法

作者: 茶还是咖啡 | 来源:发表于2020-10-12 08:45 被阅读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;
            }
        }
    

    相关文章

      网友评论

        本文标题:Fisher-Yates-Knuth洗牌算法

        本文链接:https://www.haomeiwen.com/subject/vgxvqctx.html