当前位置: 首页 > article >正文

实现乱序函数?(面试常考)

实现乱序函数?(面试常考)

// v1. 基本的实现
var values = [1, 2, 3, 4, 5];
values.sort(function () {
    // Math.random() - 0.5 随机得到一个正数、负数或是 0,如果是正数则降序排列,如果是负数则升序排列,如果是 0 就不变,然后不断的升序或者降序,最终得到一个乱序的数组。
    return Math.random() - 0.5;
})

// test
var times = [0, 0, 0, 0, 0];
for (var i = 0; i < 100000; i++) {
    let arr = [1, 2, 3, 4, 5];
    arr.sort(() => Math.random() - 0.5);
    times[arr[4]-1]++;
}

console.log(times)

// 插入排序
function insertSort(a, from, to) {

}


// v2: 乱序算法加强版
function shuffle(arr) {
    for (let i = arr.length; i > 0; i--) {
        // 遍历数组元素,然后将当前元素与以后随机位置的元素进行交换
        let j = Math.floor(Math.random() * i);
        // arr[i - 1] 就是当前的这个arr数组的最后一个元素
        [arr[i - 1], arr[j]] = [arr[j], arr[j - 1]];
    }
}

[!NOTE]
v8 为例,v8 在处理 sort 方法时,当目标数组长度小于 10 时,使用插入排序;反之,使用快速排序和插入排序的混合排序。


http://www.kler.cn/a/411452.html

相关文章:

  • Linux -日志 | 线程池 | 线程安全 | 死锁
  • 充满智慧的埃塞俄比亚狼
  • 通过端口测试验证网络安全策略
  • 【分治】--- 快速选择算法
  • 【C++动态规划 子集状态压缩】2002. 两个回文子序列长度的最大乘积|1869
  • 鸿蒙NEXT开发案例:字数统计
  • 计算(a+b)/c的值
  • [STM32]从零开始的STM32 FreeRTOS移植教程
  • 运维面试整理总结
  • 2024年11月22日Github流行趋势
  • 基于Java+SpringBoot+Mysql在线简单拍卖竞价拍卖竞拍系统功能设计与实现九
  • html转成图片
  • 「Mac玩转仓颉内测版29」基础篇9 - 数组类型详解
  • 【论文解读】CVPR 2024 DSL-FIQA :全新人脸面部图像质量评估算法(附论文地址)
  • HPA - k8s自动伸缩机制
  • 2024年11月26日Github流行趋势
  • 推荐一款龙迅HDMI2.0转LVDS芯片 LT6211UX LT6211UXC
  • 1 ISP一键下载
  • ffmpeg 生成白噪声,粉噪声,棕噪声,蓝噪声,紫噪声,丝绒噪声
  • SVG无功补偿装置MATLAB仿真模型
  • java虚拟机——频繁发生Full GC的原因有哪些?如何避免发生Full GC
  • 快速理解微服务中Fegin的概念
  • 241126学习日志——[CSDIY] [ByteDance] 后端训练营 [19]
  • 【Linux】线程同步与互斥
  • 代码随想录算法训练营第五十五天|Day55 图论
  • 第三届航空航天与控制工程国际 (ICoACE 2024)