1 for i <- 0 to n 2 d<-random(n-i) 3 swap(deck[d],deck[n-i])
1 function shuffle0(array) { 2 array.sort(function() { 3 return Math.random() - 0.5; 4 }); 5 return array; 6 }
这是一种不完全的洗牌算法
1 function shuffle1(array) { 2 for (var i = array.length - 1; i > 0; i--) { 3 var j = Math.floor(Math.random() * (i + 1)); 4 var temp = array[i]; 5 array[i] = array[j]; 6 array[j] = temp; 7 } 8 return array; 9 }
这是理想的算法
01 function shuffle2(array) { 02 var copy = [], n = array.length, i; 03 04 while (n) { 05 i = Math.floor(Math.random() * array.length); 06 07 if (i in array) { 08 copy.push(array[i]); 09 delete array[i]; 10 n--; 11 } 12 } 13 14 return copy; 15 }
这就是前面说到的屌丝算法
1 function shuffle3(array) { 2 var copy = [], n = array.length, i; 3 while (n) { 4 i = Math.floor(Math.random() * n--); 5 copy.push(array.splice(i, 1)[0]); 6 } 7 8 return copy; 9 }
1 var sum = 0; 2 for(var i=0;i<30;i++) { 3 var a = [0,1,2,3,4,5,6,7,8,9]; 4 console.log(shuffleN(a)); 5 for(var j=0;j<10; j++) { 6 if(a[j]==j) sum++; 7 } 8 } 9 console.log(‘随机重复数:‘+sum)
第一种
闲话shuffle(洗牌)算法,布布扣,bubuko.com
原文:http://www.cnblogs.com/summer_shao/p/3633632.html