使用队列对1~99的数进行排序

    先根据个位,将个位数从小到大排列;将个位排列好的数再对十位数的从小到大排列。


Queue.js

function Deque() {
    this.dataStore = [];

    //进队列,从尾部添加数据
    this.enqueue = function (data) {
        var length = this.length();
        this.dataStore[length] = data;
    }

    //进队列,从头部添加数据
    this.enqueuehead = function (data) {
        var length = this.length();
        for(var i=length;i>=1;i--) {
            this.dataStore[i] = this.dataStore[i-1];
        }
        this.dataStore[0] = data;
    }

    //从队列头部删除数据,并且获得这个数据
    this.dequeue=function () {
        var length = this.length();
        var front = this.dataStore[0];
        for(var i=1;i<length;i++) {
            this.dataStore[i-1] = this.dataStore[i];
        }
        this.dataStore[length-1] = null;
        this.dataStore.length--;
        return front;
    }

    //从队列尾部删除数据,并且获得这个数据
    this.dequeueback=function () {
        var length = this.length();
        var back = this.dataStore[length-1];
        this.dataStore[length-1] = null;
        this.dataStore.length--;
        return back;
    }

    //依次返回当前队列的数据
    this.toString=function () {
        return this.dataStore.toString();
    }

    //获得队列最前面的数据
    this.front=function(){
        return this.dataStore[0];
    }

    //获得队列最后面的数据
    this.back=function () {
        return this.dataStore[this.dataStore.length-1];
    }

    //判断当前队列是否为空
    this.empty=function () {
        if(this.dataStore.length==0){
            return true;
        }
        else{
            return false;
        }
    }

    //获取队列的长度
    this.length = function () {
        return this.dataStore.length;
    }

    //遍历队列
    this.forEach = function (call) {
        //获得队列的长度
        var length = this.length();
        for(var i=0;i<length;i++) {
            call(this.dataStore[i]);
        }
    }
}

HTML

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>快速排序</title>
    <script src="Queue.js"></script>
</head>
<body>

</body>
<script>

    //创建两个队列,一个用于存储除10的余数,一个用于存储除10的商
    var queues = [];
    var queues1 = [];
    for(var i=0;i<10;i++) {
        queues[i] = new Deque();
        queues1[i] = new Deque();
    }

    //随机产生10个1到99的数
    for(var i=0;i<10;i++) {
        var rand = Math.floor(Math.random()*99)+1;
        var index = rand%10;
        //将除10的余数加到队列queues中,使个位数从小到大排列
        queues[index].enqueue(rand);
    }

    for(var i=0;i<10;i++) {
        //遍历队列queues
        queues[i].forEach(function (item) {
            var index = Math.floor(item/10);
            //将除10的商加到队列queues1中,使十位数从小到大排列
            queues1[index].enqueue(item);
        })
    }

    for(var i=0;i<10;i++) {
        //遍历队列queues1
        queues1[i].forEach(function (item) {
            console.log(item);
        })
    }

</script>
</html>

猜你喜欢

转载自blog.csdn.net/qq_34607371/article/details/81104124