应用场景
抽奖、游戏公司洗牌、一切需要随机的地方。
算法思想
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;
}
}
}