關(guān)于Js隨機(jī)排列,網(wǎng)上查資料后mark一下。
1、網(wǎng)上很多同學(xué)使用這個(gè)方法實(shí)現(xiàn)隨機(jī)排列需求的:Array.prototype.sort-但這個(gè)方法受sort采用的排序方法的限制不能做到真正的隨機(jī)分布。
function randomsort(a, b) {
return Math.random()>0.5 ? -1 : 1;//用Math.random()函數(shù)生成0~1之間的隨機(jī)數(shù)與0.5比較,返回-1或1
}
var arr = [0,1, 2, 3, 4, 5,6,7,8,9];
arr.sort(randomsort);
2.經(jīng)典的隨機(jī)排列, O(n) 復(fù)雜度
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;
}
在上面的算法里,我們每一次循環(huán)從前 len - i 個(gè)元素里隨機(jī)一個(gè)位置,將這個(gè)元素和第 len - i 個(gè)元素進(jìn)行交換,迭代直到 i = len - 1 為止。