關于隨機打亂數組的深入研究
2006/11/21 9:29:55
這幾天看到網絡上在討論關于隨機打亂數組的問題!發現很多朋友的都有自己的方法,但是否真正的隨機了呢?這個問題的爭議一直很大,我在總結后,以及對Array.sort()內部構造的猜測后發現,還是有很多不是太完美的地方,所以我經過思考還是寫了一套關于自己的數組隨機打亂的函數,希望與大家分享一下!
好了,言歸正轉,來看看我們的三個函數,分別是: randomArray(arrLen) 功能為:產生一個完全隨機的數組,參數為數組的長度. randomIndex(arrLen) 功能為:根據參數產生一個數組,從0起到長度-1的所有自然數隨機打亂 randomSort(arr) 功能為:隨機打亂一個數組中所有值的順序.
首先是隨機數組,這是最簡單的一個函數,來看一下代碼!
function randomArray(arrLen) {
var rArr:Array = new Array(arrLen);
for (var i = 0; i<arrLen; i++) {
rArr[i] = Math.random();
}
return rArr;
}
是不是很簡單,我相信不用過多的解釋!函數返回的rArr這個數組里的所有數都是放射性隨機的,所以將來會很有用的!另外值得說明的就是用Math類產生的隨機數,客觀上是不可能會有任何重復的,因為概率小的幾乎可以完全忽略,即使數組長度為千百萬以上!
其次我們來看看,建立隨機索引的過程:
function randomIndex(arrLen) {
var iArr:Array = new Array(arrLen);
var rArr = randomArray(arrLen); //建立隨機數組,以備使用
for (var i = 0; i<arrLen; i++) { //遍歷數組,尋找最小的數字
iArr[i] = i; //默認被比較的數字為最小數字,并記錄索引
var t = rArr[i]; //記錄該數字在臨時變量中
for (var j = 0; j<arrLen; j++) { //與所有數字進行比較
if (rArr[j]<t) { //如果發現更小的數字,則更新
iArr[i] = j;
t = rArr[j];
}
}
delete t;
rArr[iArr[i]] = 1; //將最小的數字設置成1.
}
return iArr;
}
簡單說一下原理吧:隨機數組中的所有數字的大小全是不確定的,相互之間也是不確定的!任何一個數字都可能最大,也都可能最小,所以每次都會產生不同的序列,那么他們排序后索引就會被完全打亂,由此也起到了真正的隨機效果!值得一提的是其中rArr[iArr[i]]=1;是因為Math.random();不可能出現1,也就是說任何數都比1小,也保證的1是最大的,那么修改它后,第二次比較的時候就會讓它失去了比較權,因為上一輪它已經是最小的數了,并且已經被記錄過了!相反如果語句if(rArr[j]<t)其中的小于號改成大于號,最后的值應該設置成0,同樣可以起到放射性隨機的效果,只是結果完全相反而已.
現在打亂了所有的索引,最后要做的就是根據這個完全隨機的索引序列,隨機打亂數組中所有的值了:
function randomSort(arr) {
arrLen = arr.length;
var tArr = new Array(arrLen); //建立臨時數組,存放隨機打亂的數組
var iArr = randomIndex(arrLen); //建立隨機索引
for (var i = 0; i<arrLen; i++) {
tArr[i] = arr[iArr[i]]; //根據隨機索引完全打亂數組中所有的值
}
return tArr;
}
用隨機索引函數產生的數組作為預被打亂的數組的新索引,進行賦值,即完成了完全打亂的效果!
就此對于隨機打亂數組的研究也進行完了,希望對喜歡的朋友們有些幫助!
返回列表
返回首頁
主站蜘蛛池模板:
欧美欧洲性色老头老妇|
中文字幕在线看视频一区二区三区
|
成人深夜福利在线播放不卡|
九九视频在线观看视频23|
欧美综合第一页|
免费一级特黄特色大片在线|
老外毛片免费视频播放|
国产成人av在线免播放观看|
2019亚洲午夜无码天堂|
天天操天天操天天操|
中文字幕久久综合|
日本边添边摸边做边爱边视频|
亚洲中文精品久久久久久不卡|
深夜放纵内射少妇|
再深点灬舒服灬免费观看|
色九月亚洲综合网|
国产午夜av秒播在线观看|
亚洲制服欧美自拍另类|
国产色综合天天综合网|
a级毛片无码免费真人|
怡红院成人在线|
中文字幕第23页|
日本护士69xxxx免费|
乱中年女人伦av一区二区|
欧美在线精品一区二区在线观看|
亚洲精品成人a在线观看|
白嫩少妇喷水正在播放|
午夜无码伦费影视在线观看|
色综合久久伊人|
国产另类TS人妖一区二区|
免费福利在线观看|
国产精品久久久久久网站|
911香蕉视频|
在线免费观看一区二区三区|
ntr出差上司灌醉女职员电影|
成人免费一区二区三区视频|
中文字幕亚洲综合久久|
无码人妻一区二区三区免费n鬼沢|
久久午夜夜伦鲁鲁片免费无码影视
|
亚洲成综合人影院在院播放|
波多野结衣gvg708|