js數組隨機的排序


// 排序1,
// 第一種,利用數組自帶的sort方法。
// 這種方法是利用隨機出一個正數或負數來讓數組里面的內容兩兩對比,是正數就是順序,倒序就是倒序,這種方法的缺點就是隨機性不高,不能完全隨機,因為是兩兩對比,所以最后一個數在最后的可能性較大
var arr = [1,2,3,4,5,6,7,8,9]
function foo(arr){
var clonearr = arr.concat();
clonearr.sort(function(n1,n2){
return Math.random() - 0.5;
})
return clonearr;
}
console.log(foo( arr ));
// 排序2
// 第二種,利用遞歸函數對比
//  遞歸的方法是利用遞歸函數的自調,定義一個隨機數index(因為定了向下取整,所以范圍為0~8)作為隨機下標,然后將它對應的數從數組中取下壓入到result數組中,從而實現隨機排序,定義if判斷,如果cloneArr的長度為空的話,則退出循環,這種隨機的隨機性很好,但是代碼性能不太友好。
var arr = [1,2,3,4,5,6,7,8,9]
function foo(arr){
var result = [];
var cloneArr = arr.concat();

(function(){
if(!cloneArr.length){return}
var index = Math.floor(Math.random() * cloneArr.length);
result = result.concat(cloneArr.splice(index,1));
arguments.callee();
})();
return result;
}
console.log(foo(arr));
// 排序3
// 第三種,洗牌算法呢是利用隨機出的ramp下標對應的數,與數組從前到后相互切換,所以稱為洗牌,代碼運行效率相比前面幾種高,隨機性也很大。在這強烈推薦。
var arr = [1,2,3,4,5,6,7,8,9,10];
function randSort1(arr){
for(var i = 0,len = arr.length;i < len; i++ ){
var rand = parseInt(Math.random()*len);
var temp = arr[rand];
arr[rand] = arr[i];
arr[i] = temp;
}
return arr;
}
console.log(randSort1(arr));


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM