洗牌算法(Knuth算法)

  • Post author:
  • Post category:其他




算法 洗牌算法(Knuth算法)

@author:Jingdai

@date:2020.10.02



简介

给你一个数组(牌),要求打乱数组顺序,使每个元素出现在任何地方的概率一样。



思路

利用经典洗牌算法,就是 Knuth 算法。

如下图,在整个数组

[0, n-1]

中(包括最后一个元素)随机选出一个元素,将它和最后那个元素

[n-1]

交换,然后再在数组

[0, n-2]

中随机选出一个元素,将它与倒数第二个元素

[n-2]

交换…一直到最后一个元素,就完成了算法。

在这里插入图片描述



代码

public void shffule(int[] nums) {
    Random r = new Random();
    for (int i = nums.length - 1; i > 0; i--) {
        int randomIndex = r.nextInt(i+1);
        int temp = nums[randomIndex];
        nums[randomIndex] = nums[i];
        nums[i] = temp;
    }
}



版权声明:本文为qq_41512783原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。