zoukankan      html  css  js  c++  java
  • 使用队列对数组排列,基数排序

    使用队列对数组排列,基数排序
    /*
    * 使用队列对数组排列,基数排序
    *对于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
  • 相关阅读:
    HDU-5534-Partial Tree
    Dire Wolf HDU
    HDU 5119 Happy Matt Friends (14北京区域赛 类背包dp)
    4 Values whose Sum is 0 POJ
    Fliptile POJ
    Face The Right Way POJ
    【Selenium学习】解决chromedriver.exe' executable needs to be in PATH
    【Jenkins学习】修改jenkins显示为中文语言
    【Jenkins学习】Jenkins 批量删除历史构建
    【Tomcat学习】tomcat 日志详解
  • 原文地址:https://www.cnblogs.com/baiyangyuanzi/p/6677596.html
Copyright © 2011-2022 走看看