zoukankan      html  css  js  c++  java
  • 一个简单的洗牌算法

    一、背景需求

    最近在开发音乐播放网站的时候,遇到“随机播放”的需求
    需要知道的是,播放列表是以数组的形式存储的
    当切换到“随机播放”时,我们需要对这个数组进行“洗牌”,任意地交换其中的元素
    可以将这个功能封装在common目录下

    二、具体实现(Javascript)

    首先我们需要写一个 生成指定区间内的随机数 的函数
    因为数组索引都是整数,所以我们需要对随机的结果再向下取整

    // 返回一个(min,max]之间的随机数
    function getRandomInt(min, max) {
      return Math.floor(Math.random() * (max - min + 1) + min)
    }
    

    Math.random( )会生成一个(0,1)之间的Number

    然后我们需要遍历数组,对每个元素
    令其与一个索引为随机数的元素进行交换

    export function shuffle(arr) {
      for (let i = 0; i < arr.length; i++) {
        let j = getRandomInt(0, i)
        let t = arr[i]
        arr[i] = arr[j]
        arr[j] = t
      }
      return arr
    }
    

    在js中,这样会直接修改arr指向的内存地址中的数组内容
    如果需要保存原来的数组,可以对这个函数稍作修改

    export function shuffle(arr) {
      // 保存数组的副本,不直接对数组本身进行修改
      let __arr = arr.slice()
      for (let i = 0; i < __arr.length; i++) {
        let j = getRandomInt(0, i)
        let t = __arr[i]
        __arr[i] = __arr[j]
        __arr[j] = t
      }
      return __arr
    }
    
  • 相关阅读:
    实现一个文件系统
    ICN开发指导
    GPU in container
    docker debug
    内核代码中一些c语言用法
    各种Tree的python 实现
    intel VT-X (VMX) spec 解读
    intel VT-D (iommu) spec 解读
    正交幅度调制QAM
    Load balancer does not have available server for client:xxx
  • 原文地址:https://www.cnblogs.com/baebae996/p/13823279.html
Copyright © 2011-2022 走看看