码迷,mamicode.com
首页 > 编程语言 > 详细

使用队列对数组排列,基数排序

时间:2017-04-07 13:37:08      阅读:189      评论:0      收藏:0      [点我收藏+]

标签:判断   color   i++   style   blog   turn   mat   data   ons   

使用队列对数组排列,基数排序
/*
* 使用队列对数组排列,基数排序
*对于0~99的数字,基数排序将数组集扫描两次。
* 第一次按个位上的数字进行排序,
* 第二次按十位上的数字进行排序
* */
function Queue(){
    this.dataStore = [];//存放队列的数组,初始化为空
    this.enqueue = enqueue;//向队列尾部添加一个元素
    this.dequeue = dequeue;//删除队首的元素
    this.theFront = theFront;//读取队首的元素
    this.back = back;//对取队尾的元素
    this.toStrings = toStrings;//显示队列内的所有元素
    this.empty = empty;//判断队列是否为空
}

function enqueue(element){
    this.dataStore.push(element);
}

function dequeue(){
    return this.dataStore.shift();
}

function theFront(){
    return this.dataStore[0];
}

function back(){
    return this.dataStore[this.dataStore.length-1];
}

function toStrings(){
    return this.dataStore;
}

function empty(){
    if(this.dataStore.length == 0){
       return true;
    }else{
        return false;
    }
}
/*基数排序
* nums :需要排序的数组
* queues :数组,里面元素是队列
* n :队列的格式,这里为10个
* digit :传入1,则先按个位上的数字排序;传入10,则按十位上的数字排序
 *  */
function distribute(nums,queues,n,digit){
    for(var i = 0;i < n;i++){
        if(digit == 1){
            queues[nums[i]%10].enqueue(nums[i]);
        }else if(digit == 10){
            queues[Math.floor(nums[i]/10)].enqueue(nums[i]);
        }else{

        }
    }
}

function collect(queues,nums){
    var i = 0;
    for(var j = 0;j < 10;j++){
        while(!queues[j].empty()){
            nums[i++] = queues[j].dequeue();
        }
    }
}

/*测试程序*/
var queues = [];
for(var i = 0;i < 10;i++){
    queues[i] = new Queue();
}
var nums = [];
for(var i = 0;i < 10;i++){
    nums[i] = Math.floor(Math.random()*101);
}
console.log("开始的nums: "+nums);//24,72,90,84,49,69,8,30,50,0
distribute(nums,queues,10,1);
collect(queues,nums);
distribute(nums,queues,10,10);
collect(queues,nums);
console.log("排序后的nums: "+nums);//0,8,24,30,49,50,69,72,84,90

 

使用队列对数组排列,基数排序

标签:判断   color   i++   style   blog   turn   mat   data   ons   

原文地址:http://www.cnblogs.com/baiyangyuanzi/p/6677596.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!