• 用队列模拟基数排序


        function Queue() {
            //用队列模拟基数排序对应的Queue构造函数中的方法一个都不能少,否则会出错
            this.dataStore = [];
            this.enqueue = enqueue;
            this.dequeue = dequeue;
            this.empty = empty;
        }
        function enqueue(element) {//向队尾添加一个元素
            this.dataStore.push(element);
        }
        function dequeue() {//删除队首的元素
            return this.dataStore.shift();
        }
        function empty() {//判断队列是否为空
            if (this.dataStore.length == 0) {
                return true;
            } else {
                return false;
            }
        }
    
        //模拟盒子的操作
        function distribute(nums, queues, n, digit) {//实际上queues就是模拟的盒子
            for ( var i = 0; i < n; ++i) {
                if (digit == 1) {
                    queues[nums[i] % 10].enqueue(nums[i]);
                    //因为queues的每一位都是盒子,因此它可以存储多个元素
                } else {
                    queues[Math.floor(nums[i] / 10)].enqueue(nums[i]);
                    //Math.floor(x):求小于等于x的最大整数
                }
            }
        }
    
        //将盒子中的数据存储到数组中,便于读取
        function collect(queues, nums) {
            var i = 0;
            for ( var digit = 0; digit < 10; ++digit) {
                while (!queues[digit].empty()) {
                    //为什么要判断非空?因为每个元素盒子中可能包含多个子元素
                    nums[i++] = queues[digit].dequeue();
                }
            }
        }
    
        function dispArray(arr) {//将一维数组输出
            for ( var i = 0; i < arr.length; ++i) {
                document.write(arr[i] + " ");
            }
        }
        // 主程序
        var queues = [];
        for ( var i = 0; i < 10; ++i) {
            queues[i] = new Queue();//queues的每个元素都是一个队列
        }
        var nums = [];
        for ( var i = 0; i < 10; ++i) {
            nums[i] = Math.floor(Math.random() * 101);
            //Math.random():返回0-1之间的随机数,这个数大于等于0,小于1
        }
        document.write("Before radix sort: " + "<br />");
        dispArray(nums);
        distribute(nums, queues, 10, 1);
        collect(queues, nums);
        distribute(nums, queues, 10, 10);
        collect(queues, nums);
        document.write("<br />" + "After radix sort: " + "<br />");
        dispArray(nums);
        /* 上述程序运行结果:
        Before radix sort: 
        76 36 33 65 72 48 45 45 61 80 
        After radix sort: 
        33 36 45 45 48 61 65 72 76 80 */

     关于原理:参考上篇:关于基数排序原理的理解

    2016-04-10   18:47:32

  • 相关阅读:
    BeanFactory not initialized or already closed
    点击程序不弹出界面,但有后台服务
    python获取一年所有的日期
    keepalived实现高可用
    解决docker镜像pull超时问题
    docker容器的操作
    docker小结
    docker概述
    docker镜像操作
    python批量下载
  • 原文地址:https://www.cnblogs.com/feile/p/5374883.html
Copyright © 2020-2023  润新知