【洗牌算法】- 打乱数组

应用场景

抽奖、游戏公司洗牌、一切需要随机的地方。

算法思想

Fisher–Yates shuffle - 目前最好的乱序算法。

第一步需要做的就是,从数组末尾开始,选取最后一个元素。
在这里插入图片描述
在数组一共 9 个位置中,随机产生一个位置,该位置元素与最后一个元素进行交换。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
上一步中,我们已经把数组末尾元素进行随机置换。
接下来,对数组倒数第二个元素动手。在除去已经排好的最后一个元素位置以外的8个位置中,随机产生一个位置,该位置元素与倒数第二个元素进行交换。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
以此类推即可。

实现

class Shuffle{
    // 洗牌算法
    private Shuffle(){}
    private static int curIndex;
    private static int temp;
    public static void shuffle(int[] arr){
        for(int i = arr.length; i > 0; i--){
            curIndex = (int)(Math.random()*i);
            temp = arr[curIndex];
            arr[curIndex] = arr[i-1];
            arr[i-1] = temp;
        }
    }
}
发布了333 篇原创文章 · 获赞 22 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/weixin_41687289/article/details/104527107