- 洗牌算法简介
洗牌算法即可将一个包含n个元素的数组打乱,保证每个元素均匀地分布在原数组中。常用的洗牌算法有Fisher–Yates算法(也被称为Knuth-Shuffle算法),其核心思想是将数组从后往前遍历,对于未处理的元素,随机从已处理的元素中选出一个,然后与该元素交换。这样可以保证每个元素被随机地赋予新的位置。
- Java实现
Java官方提供了Collections.shuffle方法,可以直接用于List接口的洗牌操作。示例代码如下:
import java.util.*;
public class ShuffleDemo {
public static void main(String[] args) {
List<Integer> list = new ArrayList<>(Arrays.asList(1, 2, 3, 4, 5));
System.out.println("原数组:" + list);
Collections.shuffle(list);
System.out.println("洗牌后:" + list);
}
}
输出结果:
原数组:[1, 2, 3, 4, 5]
洗牌后:[2, 1, 4, 3, 5]
- JS实现
在JS中,我们可以使用Math.random()生成0-1之间的随机数,然后通过交换数组元素来实现洗牌操作。示例代码如下:
function shuffle(arr) {
for (let i = arr.length - 1; i > 0; i--) {
const j = Math.floor(Math.random() * (i + 1));
[arr[i], arr[j]] = [arr[j], arr[i]];
}
return arr;
}
const arr = [1, 2, 3, 4, 5];
console.log("原数组:" + arr);
console.log("洗牌后:" + shuffle(arr));
输出结果:
原数组:1,2,3,4,5
洗牌后:2,5,1,4,3
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java和js实现的洗牌小程序 - Python技术站