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

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

// 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 时,使用插入排序;反之,使用快速排序和插入排序的混合排序。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值