标签:
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
标签:
原文地址:http://www.cnblogs.com/feile/p/5374883.html