在學習排序算法的時候,經常要用到隨機數組,於是就寫了一個生成隨機數組的方法。算法來自網絡,只是修改成了 JavaScript 版本。
基本原理是洗牌算法,首先從所有元素中隨機選取一個與第一個元素進行交換,然後在第二個之後選擇一個元素與第二個交換,直到最後一個元素。這樣能確保每個元素在每個位置的概率都是1/n。
具體代碼如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
|
/** * * 生成從 1 到 length 之間的隨機數組 * * @length 隨機數組的長度,如果未傳遞該參數,那麼 length 爲默認值 9 * */ function randomArray(length) { var i, index, temp, arr = [length]; length = typeof(length) === 'undefined' ? 9 : length; for (i = 1; i <= length; i++) { arr[i - 1] = i; } // 打亂數組 for (i = 1; i <= length; i++) { // 產生從 i 到 length 之間的隨機數 index = parseInt(Math.random() * (length - i)) + i; if (index != i) { temp = arr[i]; arr[i] = arr[index]; arr[index] = temp; } } return arr; }
|