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 相关文章推荐
JS判断是否为数字,是否为整数,是否为浮点数的代码
Apr 24 Javascript
基于jquery的一个浮动框(扩展性比较好 )
Aug 27 Javascript
jquery判断元素的子元素是否存在的示例代码
Feb 04 Javascript
通过onmouseover选项卡实现img图片的变化
Feb 12 Javascript
jQuery中parentsUntil()方法用法实例
Jan 07 Javascript
js文本框走动跑马灯效果代码分享
Aug 25 Javascript
js阻止默认浏览器行为与冒泡行为的实现代码
May 15 Javascript
JS中如何实现复选框全选功能
Dec 19 Javascript
一篇看懂vuejs的状态管理神器 vuex状态管理模式
Apr 20 Javascript
angular.js指令中的controller、compile与link函数的不同之处
May 10 Javascript
JavaScript 九种跨域方式实现原理
Feb 11 Javascript
vue中div禁止点击事件的实现
Apr 02 Vue.js
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
优化NFR之一 --MSSQL Hello Buffer Overflow
2006/10/09 PHP
PHP脚本的10个技巧(2)
2006/10/09 PHP
php多文件上传功能实现原理及代码
2013/04/18 PHP
深入解析PHP中foreach语句控制数组循环的用法
2015/11/30 PHP
yii2 RBAC使用DbManager实现后台权限判断的方法
2016/07/23 PHP
jquery重新播放css动画所遇问题解决
2013/08/21 Javascript
showModelDialog弹出文件下载窗口的使用示例
2013/11/19 Javascript
js获取当前页面的url网址信息
2014/06/12 Javascript
浅谈页面装载js及性能分析方法
2014/12/09 Javascript
JS实现六位字符密码输入器功能
2016/08/19 Javascript
解析如何利用iframe标签以及js制作时钟
2016/12/08 Javascript
Bootstrap 下拉多选框插件Bootstrap Multiselect
2017/01/22 Javascript
js核心基础之闭包的应用实例分析
2019/05/11 Javascript
微信小程序获取用户绑定手机号方法示例
2019/07/21 Javascript
微信小程序HTTP请求从0到1封装
2019/09/09 Javascript
VUE 解决mode为history页面为空白的问题
2019/11/01 Javascript
JavaScript多种图形实现代码实例
2020/06/28 Javascript
Vue自定义全局弹窗组件操作
2020/08/11 Javascript
[36:52]DOTA2真视界:基辅特锦赛总决赛
2017/05/21 DOTA
python3使用urllib模块制作网络爬虫
2016/04/08 Python
浅析使用Python操作文件
2017/07/31 Python
关于Python如何避免循环导入问题详解
2017/09/14 Python
python实现读取excel写入mysql的小工具详解
2017/11/20 Python
pytorch中的inference使用实例
2020/02/20 Python
浅谈Python3中print函数的换行
2020/08/05 Python
解决PyCharm IDE环境下,执行unittest不生成测试报告的问题
2020/09/03 Python
HTML5 script元素async、defer异步加载使用介绍
2013/08/23 HTML / CSS
茱莉蔻美国官网:Jurlique美国
2020/11/24 全球购物
公司综合部的成员自我评价分享
2013/11/05 职场文书
关于雷锋的演讲稿
2014/05/10 职场文书
镇党政领导班子民主生活会思想汇报
2014/10/11 职场文书
2015年中个人总结范文
2015/03/10 职场文书
幼儿园中班班级总结
2015/08/10 职场文书
启迪人心的励志语录:脾气永远不要大于本事
2020/01/02 职场文书
Python实现简单的猜单词
2021/06/15 Python
基于Redis zSet实现滑动窗口对短信进行防刷限流的问题
2022/02/12 Redis