数组乱序

  function shuffle(arr) {
    let m = arr.length
    while (m > 1) {
      let index = Math.floor(Math.random() * m--)
      ;[arr[m], arr[index]] = [arr[index], arr[m]]
    }
    return arr
  }
复制代码

转载于:https://juejin.im/post/5d00c89d6fb9a07eb94f8487

### Java 数组乱序简介 在Java中,数组乱序(也称为洗牌算法)是指将一个有序或无序的数组元素随机打乱顺序的过程。这种操作常用于游戏开发、抽奖系统或其他需要生成随机排列的应用场景。为了实现这一目的,最常用的是Fisher-Yates Shuffle算法(也被称作Knuth Shuffle)。该算法的时间复杂度为O(n),能高效地完成数组元素的均匀分布。 #### Fisher-Yates Shuffle 算法步骤 1. **从最后一个元素开始遍历至第一个非首元素**:即循环变量`i`从n-1递减到1。 2. **每次迭代选择当前索引及之前的所有位置的一个随机数j**(0 <= j <= i)。 3. **交换第i个元素与所选中的第j个元素**。 下面是一个具体的Java代码实例展示如何对int型数组进行乱序: ```java import java.util.Random; public class ArrayShuffle { public static void main(String[] args){ int[] arr = {1, 2, 3, 4, 5}; shuffleArray(arr); for (int num : arr) { System.out.print(num + " "); } } // 对数组进行乱序的方法 private static void shuffleArray(int[] arrayToShuffle) { Random random = new Random(); for (int i = arrayToShuffle.length - 1; i > 0; --i) { // 随机选取 [0,i] 区间内的下标 int indexToSwap = random.nextInt(i+1); // 将选定的两个元素互换 swap(arrayToShuffle, i, indexToSwap); } } // 辅助方法:交换指定位置上的两元素值 private static void swap(int[] array, int idxA, int idxB) { if(idxA == idxB){return;} int temp = array[idxA]; array[idxA] = array[idxB]; array[idxB] = temp; } } ``` 此段代码实现了上述提到的经典Fisher-Yates Shuffle算法,并展示了如何使用它来混淆给定的一维整形数组的内容。你可以轻松修改这个例子适应其他类型的数组或是更高维度的数据结构。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值