Javascript排序算法之计数排序的实例


Posted in Javascript onApril 05, 2014

计数排序(Counting sort)是一种稳定的排序算法。计数排序使用一个额外的数组Count_arr,其中第i个元素是待排序数组Arr中值等于i的元素的个数。然后根据数组Count_arr来将Arr中的元素排到正确的位置。
分为四个步骤:
1.找出待排序的数组中最大和最小的元素
2.统计数组中每个值为i的元素出现的次数,存入数组Count_arr的第i项
3.对所有的计数累加(从Count_arr中的第一个元素开始,每一项和前一项相加)
4.反向遍历原数组:将每个元素i放在新数组的第Count_arr(i)项,每放一个元素就将Count_arr(i)减去1

实例:

/**
 * 计数排序是一个非基于比较的排序算法,
 * 该算法于1954年由 Harold H. Seward 提出。
 * 它的优势在于在对一定范围内的整数排序时,
 * 它的复杂度为Ο(n+k)(其中k是整数的范围),
 * 快于任何比较排序算法。
 *
 */function countSort(arr, min, max) {
    var i, z = 0, count = [];
    for (i = min; i <= max; i++) {
        count[i] = 0;
    }
    for (i=0; i < arr.length; i++) {
        count[arr[i]]++;
    }
    for (i = min; i <= max; i++) {
        while (count[i]-- > 0) {
            arr[z++] = i;
        }
    }
    return arr;
}
// test
var i, arr = [];
for (i = 0; i < 100; i++) {
    arr.push(Math.floor(Math.random() * (141)));
}
countSort(arr, 0, 140);
Javascript 相关文章推荐
jQuery实现的Email中的收件人效果(按del键删除)
Mar 20 Javascript
通过正则格式化url查询字符串实现代码
Dec 28 Javascript
jQuery登陆判断简单实现代码
Apr 21 Javascript
jQuery获取当前对象标签名称的方法
Feb 07 Javascript
javascript中JSON对象与JSON字符串相互转换实例
Jul 11 Javascript
BootStrap selectpicker后台动态绑定数据
Jun 01 Javascript
AngularJS路由删除#符号解决的办法
Sep 28 Javascript
使用mpvue搭建一个初始小程序及项目配置方法
Dec 03 Javascript
Node.js 实现远程桌面监控的方法步骤
Jul 02 Javascript
vue 组件中使用 transition 和 transition-group实现过渡动画
Jul 09 Javascript
如何对react hooks进行单元测试的方法
Aug 14 Javascript
微信小程序中的video视频实现 自定义播放按钮、封面图、视频封面上文案
Jan 02 Javascript
JavaScript中的正则表达式简明总结
Apr 04 #Javascript
JavaScript格式化日期时间的方法和自定义格式化函数示例
Apr 04 #Javascript
Javascript排序算法之合并排序(归并排序)的2个例子
Apr 04 #Javascript
JQuery记住用户名和密码的具体实现
Apr 04 #Javascript
JS根据变量保存方法名并执行方法示例
Apr 04 #Javascript
JavaScript制作的可折叠弹出式菜单示例
Apr 04 #Javascript
JavaScript排序算法之希尔排序的2个实例
Apr 04 #Javascript
You might like
浅析php中抽象类和接口的概念以及区别
2013/06/27 PHP
让 JavaScript 轻松支持函数重载 (Part 2 - 实现)
2009/08/04 Javascript
jQuery设置div一直在页面顶部显示的方法
2013/10/24 Javascript
jquery实现不同大小浏览器使用不同的css样式表的方法
2014/04/02 Javascript
Linux下使用jq友好的打印JSON技巧分享
2014/11/18 Javascript
js实现点击图片将图片地址复制到粘贴板的方法
2015/02/16 Javascript
javascript html5移动端轻松实现文件上传
2020/03/27 Javascript
JavaScript学习笔记之创建对象
2016/03/25 Javascript
Form表单按回车自动提交表单的实现方法
2016/11/18 Javascript
重新认识vue之事件阻止冒泡的实现
2018/08/02 Javascript
使用jquery DataTable和ajax向页面显示数据列表的方法
2018/08/09 jQuery
微信小程序scroll-view实现滚动穿透和阻止滚动的方法
2018/08/20 Javascript
react 中父组件与子组件双向绑定问题
2019/05/20 Javascript
Vue替代marquee标签超出宽度文字横向滚动效果
2019/12/09 Javascript
2020淘宝618理想生活列车自动领喵币js脚本的代码
2020/06/02 Javascript
[05:08]顺网杯ISS-DOTA2赛歌 少女偶像Lunar青春演绎
2013/12/05 DOTA
Python中的字典遍历备忘
2015/01/17 Python
Django使用Mysql数据库已经存在的数据表方法
2018/05/27 Python
基于Python的Post请求数据爬取的方法详解
2019/06/14 Python
使用Python opencv实现视频与图片的相互转换
2019/07/08 Python
处理python中多线程与多进程中的数据共享问题
2019/07/28 Python
对Tensorflow中tensorboard日志的生成与显示详解
2020/02/04 Python
python利用Excel读取和存储测试数据完成接口自动化教程
2020/04/30 Python
Python实现电视里的5毛特效实例代码详解
2020/05/15 Python
html5嵌入内容_动力节点Java学院整理
2017/07/07 HTML / CSS
localstorage和sessionstorage使用记录(推荐)
2017/05/23 HTML / CSS
香港中原电器网上商店:Chung Yuen
2019/06/26 全球购物
介绍一下Linux文件的记录形式
2013/09/29 面试题
安全教育实施方案
2014/03/02 职场文书
邀请函怎么写
2015/01/30 职场文书
董事长秘书岗位职责
2015/02/13 职场文书
详解使用 CSS prefers-* 规范提升网站的可访问性与健壮性
2021/05/25 HTML / CSS
MongoDB orm框架的注意事项及简单使用
2021/06/20 MongoDB
使用nginx配置访问wgcloud的方法
2021/06/26 Servers
Java面试题冲刺第十六天--消息队列
2021/08/07 面试题
Mybatis-plus配置分页插件返回统一结果集
2022/06/21 Java/Android