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 相关文章推荐
经常用的图片在容器中的水平垂直居中实例
Jun 10 Javascript
基于jquery的无刷新分页技术
Jun 11 Javascript
Jquery为单选框checkbox绑定单击click事件
Dec 18 Javascript
JS打开新窗口的2种方式
Apr 18 Javascript
javascript模块化是什么及其优缺点介绍
Sep 02 Javascript
Angular外部使用js调用Angular控制器中的函数方法或变量用法示例
Aug 05 Javascript
用js写的一个路由(简单实例)
Sep 24 Javascript
JS基于递归实现倒计时效果的方法
Nov 26 Javascript
AngularJs篇:使用AngularJs打造一个简易权限系统的实现代码
Dec 26 Javascript
Angular.js中控制器之间的传值详解
Apr 24 Javascript
解决VUE项目使用Element-ui 下拉组件的验证失效问题
Nov 07 Javascript
基于JavaScript实现随机点名器
Feb 25 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木马攻击防御之道
2008/03/24 PHP
纯JS实现的批量图片预览加载功能
2011/08/14 Javascript
jQuery $.data()方法使用注意细节
2012/12/31 Javascript
js获取input标签的输入值实现代码
2013/08/05 Javascript
在javaScript中关于submit和button的区别介绍
2013/10/20 Javascript
javascript阻止scroll事件多次执行的思路及实现
2013/11/08 Javascript
jQuery根据元素值删除数组元素的方法
2015/06/24 Javascript
最全的Javascript编码规范(推荐)
2016/06/22 Javascript
jquery 实现复选框的全选操作实例代码
2017/01/24 Javascript
老生常谈js-react组件生命周期
2017/05/02 Javascript
angularjs http与后台交互的实现示例
2018/12/21 Javascript
Vue页面刷新记住页面状态的实现
2019/12/27 Javascript
javascript实现左右缓动动画函数
2020/11/25 Javascript
[14:03]2017DOTA2亚洲邀请赛开幕式:12神兵演绎水墨中华
2017/04/01 DOTA
python3通过selenium爬虫获取到dj商品的实例代码
2019/04/25 Python
11个Python Pandas小技巧让你的工作更高效(附代码实例)
2019/04/30 Python
Pandas之ReIndex重新索引的实现
2019/06/25 Python
python elasticsearch环境搭建详解
2019/09/02 Python
Python读取xlsx数据生成图标代码实例
2020/08/12 Python
python实现录音功能(可随时停止录音)
2020/10/26 Python
GNC健安喜美国官网:美国第一营养品牌
2016/07/22 全球购物
戴森西班牙官网:Dyson西班牙
2020/02/04 全球购物
武汉英思工程科技有限公司&ndash;ORACLE面试测试题目
2012/04/30 面试题
食品厂厂长岗位职责
2014/01/30 职场文书
2015年幼儿园毕业感言
2014/02/12 职场文书
英文自荐信常用句子
2014/03/26 职场文书
产品质量承诺书
2014/03/27 职场文书
房屋转让协议书范本
2014/04/11 职场文书
淘宝好评语大全
2014/05/05 职场文书
节约用水的口号
2014/06/20 职场文书
教师师德表现自我评价
2015/03/05 职场文书
小学校园广播稿
2015/08/18 职场文书
15个值得收藏的JavaScript函数
2021/09/15 Javascript
AJAX实现指定部分页面刷新效果
2021/10/16 Javascript
详解JavaScript的计时器和按钮效果设置
2022/02/18 Javascript
Promise静态四兄弟实现示例详解
2022/07/07 Javascript