分享一个生成随机序列的算法

偶然看到一个面试问题:一个数组中有0-99共100个数,要求打乱这个数组的顺序,越乱越好。下班在家里想了很久只想到一些暴力方法,效率还不高。今天在地铁上灵光一闪,想到一种特别巧妙的算法,特地和大家分享下:给数组里面每个元素加上随机的权重,然后根据权重排序。代码是JavaScript(写起来舒服),各位大大不要打我啊,逃

function getRandomList(arr) {
    let maxWeight = 10 * arr.length; //减小重复概率
    let list = [];
    for(let i in arr) {
        list.push({
            weight: Math.ceil(maxWeight * Math.random()),
            value: arr[i]
        });
    }
    list.sort(function(a, b) {
        return a.weight > b.weight;
    });

    let ans = [];
    for(let i in list) {
        ans.push(list[i].value);
    }
    return ans;
}

后面查资料发现《算法导论》已经有这种算法的记载了,哎,人丑还是得多看书。

本作品采用《CC 协议》,转载必须注明作者和本文链接
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!