JS实现的计数排序与基数排序算法示例


Posted in Javascript onDecember 04, 2017

本文实例讲述了JS实现的计数排序与基数排序算法。分享给大家供大家参考,具体如下:

计数排序

计数排序就是简单的桶排序,一个桶代表数组中一个数出现的个数,所以需要一个和数组数字范围一样大的辅助数组,一般用在范围小于100的排序,时间复杂度为O(n),空间复杂度为数组的数字范围。

/**
 * 范围在 start - end 之间的排序
 * 计数排序需要辅助数组,该辅助数组的长度是待排序数组的范围,所以一般用作范围小于100的排序
 */
function countSort(arr, start, end) {
  var len = arr.length;
  // 桶数组
  var suportArr = new Array(end - start + 1);
  // 结果数组
  var resArr = new Array(len);
  // 初始化桶数组
  for (i = 0; i < suportArr.length; i++) {
    suportArr[i] = 0;
  }
  // 待排序数组中的数组出现,在桶子对应位置+1代表这个数出现的个数+1了
  for (let i = 0; i < len; i++) {
    suportArr[arr[i]]++;
  }
   // 从第1项开始,桶数组加上前一个桶的个数,现在辅助数组的意义变成了每一项的排名了。
  for (let i = 1; i < suportArr.length; i++) {
    suportArr[i] += suportArr[i - 1];
  }
  // 根据辅助数组的排名,从后往前赋值
  for (let i = len - 1; i >= 0; i--) {
    resArr[suportArr[arr[i]] - 1] = arr[i];
    suportArr[arr[i]]--;
  }
  return resArr;
}

基数排序

基数排序是多躺的桶排序

var radix = 16; // 基数,可以为任何数,越大趟数越小,但是桶数越多,最好根据最大数字进行定义。
function _roundSort(arr, round, radix) {
  var buckets = new Array(radix);
  for (let i = 0; i < radix; i++) {
    buckets[i] = [];
  }
  // 将数组中的数放进对应的桶子中
  for (let i = 0; i < arr.length; i++) {
    let remainder = Math.floor(arr[i] / (radix ** (round - 1))) % radix;
    buckets[remainder].push(arr[i]);
  }
  // 将数组重新根据桶子进行排序
  var index = 0;
  for (let i = 0; i < buckets.length; i++) {
    for (let j = 0; j < buckets[i].length; j++) {
      arr[index++] = buckets[i][j];
    }
  }
}
function radixSort(arr, round) {
  for (let i = 1; i <= round; i++) {
    _roundSort(arr, i, radix);
  }
  return arr;
}
console.log(radixSort([10,5,5,50,0,155,4622,5,1,4,2154], 4));
Javascript 相关文章推荐
用JavaScript对JSON进行模式匹配 (Part 2 - 实现)
Jul 17 Javascript
javascript 模拟坦克大战游戏(html5版)附源码下载
Apr 08 Javascript
javascript实现数组内值索引随机化及创建随机数组的方法
Aug 10 Javascript
JS更改select内option属性的方法
Oct 14 Javascript
jQuery检测滚动条是否到达底部
Dec 15 Javascript
javascript瀑布流布局实现方法详解
Feb 17 Javascript
Node.js环境下JavaScript实现单链表与双链表结构
Jun 12 Javascript
jquery文字填写自动高度的实现方法
Nov 07 Javascript
AngularJS表格样式简单设置方法示例
Mar 03 Javascript
关于vue中 $emit的用法详解
Apr 12 Javascript
详解Node.js一行命令上传本地文件到服务器
Apr 22 Javascript
原生JS实现贪吃蛇小游戏
Mar 09 Javascript
JS 中document.write()的用法和清空的原因浅析
Dec 04 #Javascript
JavaScript实现省市联动过程中bug的解决方法
Dec 04 #Javascript
浅谈 vue 中的 watcher
Dec 04 #Javascript
vue中的计算属性的使用和vue实例的方法示例
Dec 04 #Javascript
Vue导出json数据到Excel电子表格的示例
Dec 04 #Javascript
微信小程序tabBar用法实例详解
Dec 04 #Javascript
详解如何实现一个简单的Node.js脚手架
Dec 04 #Javascript
You might like
CodeIgniter php mvc框架 中国网站
2008/05/26 PHP
图片动画横条广告带上下滚动可自定义图片、链接等等
2013/10/20 Javascript
兼容Firefox的Javascript XSLT 处理XML文件
2014/12/31 Javascript
javascript实现网页屏蔽Backspace事件,输入框不屏蔽
2015/07/21 Javascript
javascript实现网页端解压并查看zip文件
2015/12/15 Javascript
jQuery实现滚动鼠标放大缩小图片的方法(附demo源码下载)
2016/03/05 Javascript
jQuery实现点击弹出背景变暗遮罩效果实例代码
2016/06/24 Javascript
AngularJS入门教程之XHR和依赖注入详解
2016/08/18 Javascript
NodeJS、NPM安装配置步骤(windows版本) 以及环境变量详解
2017/05/13 NodeJs
JS身份证信息验证正则表达式
2017/06/12 Javascript
vue移动端裁剪图片结合插件Cropper的使用实例代码
2017/07/10 Javascript
js仿微信抢红包功能
2020/09/25 Javascript
360提示[高危]使用存在漏洞的JQuery版本的解决方法
2017/10/27 jQuery
用最少的JS代码写出贪吃蛇游戏
2018/01/12 Javascript
Node绑定全局TraceID的实现方法
2019/11/14 Javascript
在node环境下parse Smarty模板的使用示例代码
2019/11/15 Javascript
webpack常用配置总览(小结)
2019/11/18 Javascript
解决Vue.js应用回退或刷新界面时提示用户保存修改问题
2019/11/24 Javascript
JavaScript实现简单计算器功能
2019/12/19 Javascript
Vue实现简单购物车功能
2020/12/13 Vue.js
Python实现冒泡排序的简单应用示例
2017/12/11 Python
Python实现KNN邻近算法
2021/01/28 Python
python pandas获取csv指定行 列的操作方法
2019/07/12 Python
Python利用PyExecJS库执行JS函数的案例分析
2019/12/18 Python
python输出数学符号实例
2020/05/11 Python
佳能德国网上商店:Canon德国
2017/03/18 全球购物
独特的礼品和创新的科技产品:The Grommet
2018/02/24 全球购物
女性时尚网购:Chic Me
2019/07/30 全球购物
个性大学生自我评价
2013/12/04 职场文书
业务总经理岗位职责
2014/02/03 职场文书
校园摄影活动策划方案
2014/02/05 职场文书
市场营销管理毕业生自荐信
2014/03/03 职场文书
《郑和远航》教学反思
2014/04/16 职场文书
会计个人实习计划书
2014/08/15 职场文书
2014最新房贷收入证明范本
2014/09/12 职场文书
2016年先进班集体事迹材料
2016/02/26 职场文书