经典的随机排列

关于Js随机排列,网上查资料后mark一下。

1、网上很多同学使用这个方法实现随机排列需求的:Array.prototype.sort-但这个方法受sort采用的排序方法的限制不能做到真正的随机分布。
function randomsort(a, b) {
    return Math.random()>0.5 ? -1 : 1;//用Math.random()函数生成0~1之间的随机数与0.5比较,返回-1或1
}
var arr = [0,1, 2, 3, 4, 5,6,7,8,9];
arr.sort(randomsort);
2.经典的随机排列, O(n) 复杂度
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;
}

在上面的算法里,我们每一次循环从前 len - i 个元素里随机一个位置,将这个元素和第 len - i 个元素进行交换,迭代直到 i = len - 1 为止。

你可能感兴趣的:(经典的随机排列)