1、隨機生成長度為n,且值在[min-max]范圍內
function generateRandomArr(n, min, max) {
var arr = [];
for (var i = 0; i < n; i++) {
var random = Math.floor(Math.random() * (max - min + 1) + min);
arr.push(random);
}
return arr;
}
2、隨機生成長度為n,且值在[0-(n-1)]范圍內的無重復數據的有序數組
function generateOrderedNoRepeatArr(n) {
var arr = Array.from({length:n}, (v, k) => k);
return arr;
}
3、隨機生成長度為n,且值在[min-max]范圍內的隨機不重復數組,前提是n<(max-min)
function generateNoRepeatdArr(n, min, max) {
var arr = [],res = [];
for(var i=min;i<max;i++){
arr.push(i);
}
for (i=0 ; i <n; i++) {
var index = parseInt(Math.random()*(arr.length));
res.push(arr[index]);
arr.splice(index,1) //已選用的數,從數組arr中移除, 實現去重復
}
return res;
}
4、隨機生成長度為n,且值在[min-max]范圍內的隨機有序數組
/*首先生成一個無須且可能有重復數據的數組*/
function generateOrderedArr(n, min, max) {
var arr = [];
for (var i = 0; i < n; i++) {
var random = Math.floor(Math.random() * (max - min + 1) + min);
arr.push(random);
}
return arr;
}
/*以下為三路快排的方法,可對無序數組進行排序,達到良好的效果*/
function __quickSort3Ways(arr, l, r) {
if (l >= r) return;
/*partition*/
var random = Math.floor(Math.random() * (r - l + 1) + l);
[arr[l], arr[random]] = [arr[random], arr[l]];
var v = arr[l];
var lt = l; //arr[l+1...lt]<v
var gt = r + 1; //arr[gt...r]>v
var i = l + 1; //arr[lt+1...i]==v
while (i < gt) {
if (arr[i] < v) {
[arr[i], arr[lt + 1]] = [arr[lt + 1], arr[i]];
lt++;
i++;
} else if (arr[i] > v) {
[arr[i], arr[gt - 1]] = [arr[gt - 1], arr[i]];
gt--;
} else { //arr[i]==v
i++;
}
}
[arr[l], arr[lt]] = [arr[lt], arr[l]];
__quickSort3Ways(arr, l, lt - 1);
__quickSort3Ways(arr, gt, r);
}
function quickSort3Ways(arr, n) {
__quickSort3Ways(arr, 0, n - 1);
}
/*排好序的數組*/
quickSort3Ways(generateOrderedArr(100,1,10),100);