【手撕代码8】数组乱序,生成不重复的随机范围的数字

1. 数组乱序

利用sort,不好

  • 传给sort一个比较函数,如果比较函数return值小于0,则表示a必须出现在b前面,否则在b后面
function shuffle(arr){
    return arr.sort(function(){
        return Math.random() > 0.5 ? -1 : 1;
    }
}

复杂度为o(n)

  • 每一次循环从前 len - i 个元素里随机一个位置,将这个元素和第 len - i 个元素进行交换,迭代直到 i = len - 1 为止。
function shuffle(arr){
  var len=arr.length;
  for(var i=0;i<len-1;i++){
    var idx=Math.floor(Math.random()*(len-i));
    var temp=arr[idx];
    arr[idx]=arr[len-i-1];
    arr[len-i-1]=temp; 
  }
  return arr;
  console.log(arr);
}
shuffle([1,2,3,4,5,6,7]);

生成10个20-50之间的随机数,存在数组中

//生成10个20-50之间的随机数,存在数组中
var arr=[55];
var num=0;
while(arr.length<=10){
  var flag=true;
  num=Math.round(Math.random()*30+20);
  if(arr.length==0){
    arr.push(num);
  }else{
    for(var i=0;i<arr.length;i++){
      if(num==arr[i]){
        flag=false;
      }
    }
    if(flag){
      arr.push(num);
    }
  }
}
console.log(arr);
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容