Fisher-Yates-Knuth洗牌算法
2020-10-12 本文已影响0人
茶还是咖啡
给定一副扑克牌,要求将排均匀的打乱
算法思路:
-
将扑克牌依次存储到数组中,将数组分成两部分,前半部分是已经打乱顺序的,后半部分是没有打乱顺序的,初始情况下,打乱顺序的部分长度为0。
-
从有序的牌中随机选择一张并与有序部分的第一张牌进行交换,打乱部分长度加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;
}
}