首页 > 编程语言 > 详细

js随机数生成与排序

时间:2017-02-03 16:59:10      阅读:186      评论:0      收藏:0      [点我收藏+]
use strict;
// 排序算法、



// 生成一个指定数量的不含重复数字的随机数组
function ranArr(n,callback) {
    var res = [];
    var tmp ;
    res = lack(res,n);
    ckRanArr(res,n,0,function (res) {
        return callback(res);
    });
}


// 生成一个指定范围内(正整数 a到b)的随机数
function ranNum(a,b){
    var n = Math.abs(a - b );
    var base_n = a;
    if(a > b){ base_n = b; }
    var res = Math.floor(Math.random()*n) + base_n;
    return res;
}

// 返回去除重复项后的数组
function quchong(arr) {    
    var arr2 = arr.slice(0);
    var arr2_len = arr2.length;
    var arr3 = [];

    for(var j = 0;j < arr2_len;j++){
    // 重复项不进新数组 去重
    (function (item,ind) {
        var flag = false;
        for(var k = (ind + 1);k < arr2_len; k++){
            if(item == arr2[k]){
                flag = true;
            }
        }
        if(!flag){
            arr3.push(item);
        }
    }) (arr2[j],j);
    }    
    return arr3;
}

// 补缺失的量并检查
function lack(arr,n) {    
    // 去重后数量少了 补上
    var arr_len = arr.length;
    if(arr_len < n){
        var lack = n - arr_len;
        for(var j = 0; j < lack;j++){
            arr.push( ranNum(0,100000000) );
        }
    }
    return arr;
}

// 递归检查函数  count:重试次数 重试次数限制与生成数量相关
function ckRanArr(arr,n,count,callback){    
    
    var limit;
    if(n < 1000){
        limit = 10*n;
    }
    if(n >= 1000){
        limit = n;
    }
    if(count <  limit){
        count++;
        var arr2 = quchong(arr);  // 去重 
        if(arr2.length < n ){
            var arr3 = lack(arr2,n);  // 补量
            ckRanArr(arr3,n,count,callback);
        }
        else{
            return callback(arr2);
        }
    }
    else{
        return callback( quchong(arr) );
    }
}

ranArr(10,function (res) {
    console.log(res);
});

 // 上面的递归调用会发生每个函数都是一个栈,会生成一个不断堆叠的函数栈直到最后一个栈函数return后依次退出。

// 同步循环生成版
function ranArr2(n){
    var arr = [];
    arr = lack(arr,n);
    var limit;
    if(n < 1000){
        limit = 10*n;
    }
    else{
        limit = n;
    }
    cl:for(var i = 0;i < limit;i++){ console.log(i);  
        var arr2 = quchong(arr);  // 去重
        if(arr2.length < n){
            arr = lack(arr2,n); // 补量
        }
        else{
            break cl;
        }
    }
    return arr;
}

 

js随机数生成与排序

原文:http://www.cnblogs.com/isdom/p/webclips072.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!