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

偶然看到一个面试问题:一个数组中有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 协议》,转载必须注明作者和本文链接
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

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