随机生成一个长度为n的数组

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);

猜你喜欢

转载自blog.csdn.net/weboof/article/details/79034078