JS使用队列对数组排列,基数排序算法示例


Posted in Javascript onMarch 02, 2019

本文实例讲述了JS使用队列对数组排列,基数排序算法。分享给大家供大家参考,具体如下:

/*
* 使用队列对数组排列,基数排序
*对于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

使用在线HTML/CSS/JavaScript代码运行工具:http://tools.3water.com/code/HtmlJsRun测试上述代码,可得如下运行结果:

JS使用队列对数组排列,基数排序算法示例

Javascript 相关文章推荐
showModalDialog 和 showModelessDialog
Jan 22 Javascript
基于MooTools的很有创意的滚动条时钟动画
Nov 14 Javascript
JavaScript引用类型和基本类型详解
Jan 06 Javascript
学习Angular中作用域需要注意的坑
Aug 17 Javascript
js阻止移动端页面滚动的两种方法
Jan 25 Javascript
jQuery代码实现实时获取时间
Jan 29 Javascript
微信小程序 选项卡的简单实例
May 24 Javascript
使用Angular Cli如何创建Angular私有库详解
Jan 30 Javascript
小程序关于请求同步的总结
May 05 Javascript
Node.js 获取微信JS-SDK CONFIG的方法示例
May 21 Javascript
微信小程序实现多行文字超出部分省略号显示功能
Oct 23 Javascript
小程序识别身份证,银行卡,营业执照,驾照的实现
Nov 05 Javascript
VUE引入第三方js包及调用方法讲解
Mar 01 #Javascript
JavaScript数据结构与算法之二叉树添加/删除节点操作示例
Mar 01 #Javascript
JavaScript数据结构与算法之二叉树实现查找最小值、最大值、给定值算法示例
Mar 01 #Javascript
Angular7.2.7路由使用初体验
Mar 01 #Javascript
vuex实现及简略解析(小结)
Mar 01 #Javascript
简单两步使用node发送qq邮件的方法
Mar 01 #Javascript
Vue实现类似Spring官网图片滑动效果方法
Mar 01 #Javascript
You might like
Mac系统下使用brew搭建PHP(LNMP/LAMP)开发环境
2015/03/03 PHP
PHP中把数据库查询结果输出为json格式简单实例
2015/04/09 PHP
js jquery获取随机生成id的服务器控件的三种方法
2013/07/11 Javascript
javascript操作css属性
2013/12/30 Javascript
原生js实现fadein 和 fadeout淡入淡出效果
2014/06/05 Javascript
探讨js字符串数组拼接的性能问题
2014/10/11 Javascript
js实现简洁大方的二级下拉菜单效果代码
2015/09/01 Javascript
JS实现的页面自定义滚动条效果
2015/10/26 Javascript
基于MVC4+EasyUI的Web开发框架形成之旅之界面控件的使用
2015/12/16 Javascript
浏览器复制插件zeroclipboard使用指南
2016/03/26 Javascript
微信小程序 数据访问实例详解
2016/10/08 Javascript
解决VUEX刷新的时候出现数据消失
2017/07/03 Javascript
基于Vue 2.0的模块化前端 UI 组件库小结
2017/12/21 Javascript
JS弹窗 JS弹出DIV并使整个页面背景变暗功能的实现代码
2018/04/21 Javascript
vue实现个人信息查看和密码修改功能
2018/05/06 Javascript
浅谈react-router@4.0 使用方法和源码分析
2019/06/04 Javascript
基于JavaScript实现简单抽奖功能代码实例
2020/10/20 Javascript
vue+iview实现分页及查询功能
2020/11/17 Vue.js
JS中循环遍历数组的四种方式总结
2021/01/23 Javascript
[15:41]教你分分钟做大人——灰烬之灵
2015/03/11 DOTA
[01:47]2018年度DOTA2最具人气解说-完美盛典
2018/12/16 DOTA
Python 实现删除某路径下文件及文件夹的实例讲解
2018/04/24 Python
Flask框架中request、请求钩子、上下文用法分析
2019/07/23 Python
django序列化serializers过程解析
2019/12/14 Python
python 解决cv2绘制中文乱码问题
2019/12/23 Python
Pycharm 使用 Pipenv 新建的虚拟环境(图文详解)
2020/04/16 Python
CSS3实现时间轴效果
2016/07/11 HTML / CSS
来自南加州灵感的工作和娱乐服装:TravisMathew
2019/05/01 全球购物
最新的咖啡店创业计划书
2013/12/30 职场文书
土建资料员岗位职责
2014/01/04 职场文书
优秀员工获奖感言
2014/03/01 职场文书
干部培训工作总结2015
2015/05/25 职场文书
2016年校园社会综合治理宣传月活动总结
2016/03/16 职场文书
Nginx开启Brotli压缩算法实现过程详解
2021/03/31 Servers
基于Java的MathML转图片的方法(示例代码)
2021/06/23 Java/Android
python多次执行绘制条形图
2022/04/20 Python