数组shuffle


题意描述:

给定一个数组,随机打乱该数组中元素的排列顺序。


示例:

输入:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
输出:[4, 6, 1, 3, 2, 5, 7, 8, 9, 0]

解题思路:

A: 现在了解到的有三种方法。一种是将数组中的每个位置的元素都与一个随机的位置交换;第二种方法是调用数组的 sort 方法,传入一个随机返回正负值的比较函数;第三种是用Math.random() 产生一组随机序列,然后按照这个序列将数组中的元素splice, push 到别的数组去。


代码:

JavaScript 方法一:将每个位置的元素与随机的一个位置交换。

var shuffle = function(nums){
    for(let i=0; i<nums.length; ++i){
        randomIndex = parseInt(Math.random() * nums.length);
        swap(nums, i, randomIndex);
    }
}
var swap = function(nums, indexa, indexb){
    let tmp = nums[indexa];
    nums[indexa] = nums[indexb];
    nums[indexb] = tmp;
    return ;
}

JavaScript 方法二: 使用数组的 sort 方法并,传入一个随机返回正负结果的比较函数。

var shuffle = function(nums){
    nums.sort((a, b)=>{
        return Math.random() - 0.5;
    });
}

JavaScript 方法三: 将数组中的元素按照某个随机序列提取到另一个 数组中去。

var shuffle = function(nums){
    var shuffleResult = [];
    let bound = nums.length;
    for(let i=0; i<bound; ++i){
        let randomIndex = parseInt(Math.random() * (bound-i));
        let remove = nums.splice(randomIndex, 1);
        shuffleResult.push(remove[0]);
    }
    return shuffleResult;
}

总结:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值