美文网首页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洗牌算法

    给定一副扑克牌,要求将排均匀的打乱 算法思路: 将扑克牌依次存储到数组中,将数组分成两部分,前半部分是已经打乱顺序...

  • Golang洗牌算法,抢红包算法

    本文为转载,原文:Golang洗牌算法,抢红包算法 1. 洗牌算法 洗牌算法,即将原来的顺序打乱,组成新的随机排序...

  • 洗牌算法

    一次偶然的机会,需要我生成一个长度为len的数组。数组的内容是[0-len)。这并不难,分分钟生成这样一个数组: ...

  • 洗牌算法

    在工作中需要重写一个洗牌算法,根据网络中的资料分析了一下,已经有总结得很好的了,就直接总结转载了一下。 洗牌算法大...

  • 洗牌算法

    洗牌算法是一个比较形象的术语,本质上让一个数组内的元素随机排列。

  • 洗牌算法

    问题 实现一个最简单的洗牌算法。 分析 很多人第一次都可能会很迷惑,其实只要理解好了这个题目,实现起来相信并不难。...

  • 洗牌算法

    概述### 洗牌算法(可以归类到随即算法中),顾名思义,就是只利用一次循环等概率的取到不同的元素(牌)。 描述##...

  • 洗牌算法

    打乱一个序列 暴力方法 每次生成一个随机数,然后将对应下标的原序列数添加到新数组中。同时应该有一个memo用来记录...

  • 洗牌算法

    第一次接触洗牌算法是在一次面试上,面试官要求我写出一个算法将一个1~100的有序数组打乱,不考虑性能,那次我想了许...

  • 洗牌算法

    随机打乱一个数组的顺序。场景:验证码之类。要求生成n位不重复的数字组合(0

网友评论

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

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