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代码
Nov 09 Javascript
javascript 兼容鼠标滚轮事件
Apr 07 Javascript
javascript实现表单验证
Jan 29 Javascript
使用Jasmine和Karma对AngularJS页面程序进行测试
Mar 05 Javascript
jQuery取得元素标签名称小结(附代码)
Aug 16 jQuery
VUE Error: getaddrinfo ENOTFOUND localhost
May 03 Javascript
JS实现区分中英文并统计字符个数的方法示例
Jun 09 Javascript
微信小程序之多列表的显示和隐藏功能【附源码】
Aug 06 Javascript
详解JS取出两个数组中的不同或相同元素
Mar 20 Javascript
微信小程序 动态修改页面数据及参数传递过程详解
Sep 27 Javascript
jquery实现直播弹幕效果
Nov 28 jQuery
vue基于v-charts封装双向条形图的实现代码
Dec 09 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/13 PHP
php防止网站被攻击的应急代码
2015/10/21 PHP
PHP的PDO常用类库实例分析
2016/04/07 PHP
php监测数据是否成功插入到Mysql数据库的方法
2016/11/25 PHP
详解php几行代码实现CSV格式文件输出
2017/07/01 PHP
php制作圆形用户头像的实例_自定义封装类源代码
2017/09/18 PHP
thinkPHP框架实现的短信接口验证码功能示例
2018/06/20 PHP
不间断滚动JS打包类,基本可以实现所有的滚动效果,太强了
2007/12/08 Javascript
jquery ui dialog里调用datepicker的问题
2009/08/06 Javascript
Visual Studio中的jQuery智能提示设置方法
2010/03/27 Javascript
js面向对象设计用{}好还是function(){}好(构造函数)
2011/10/23 Javascript
基于JavaScript实现移动端TAB触屏切换效果
2015/10/20 Javascript
JavaScript动态添加事件之事件委托
2016/07/12 Javascript
BootStrap Tooltip插件源码解析
2016/12/27 Javascript
Bootstrap实现渐变顶部固定自适应导航栏
2020/08/27 Javascript
AngularJS实现根据不同条件显示不同控件
2017/04/20 Javascript
iscroll实现下拉刷新功能
2017/07/18 Javascript
vue-cli4使用全局less文件中的变量配置操作
2020/10/21 Javascript
python实现巡检系统(solaris)示例
2014/04/02 Python
python使用SMTP发送qq或sina邮件
2017/10/21 Python
Python数据结构与算法之字典树实现方法示例
2017/12/13 Python
Python实现的圆形绘制(画圆)示例
2018/01/31 Python
使用Python微信库itchat获得好友和群组已撤回的消息
2018/06/24 Python
python 使用正则表达式按照多个空格分割字符的实例
2018/12/20 Python
Django自定义列表 models字段显示方式
2020/04/03 Python
pandas数据拼接的实现示例
2020/04/16 Python
CSS3 calc()会计算属性详解
2018/02/27 HTML / CSS
Gap工厂店:Gap Factory
2017/11/02 全球购物
如何提高MySql的安全性
2014/06/19 面试题
老教师工作总结的自我评价
2013/09/27 职场文书
关于建议书的格式范文
2014/05/20 职场文书
公司活动总结怎么写
2014/06/25 职场文书
化学教育专业自荐信
2014/07/04 职场文书
银行转正自我鉴定
2014/09/29 职场文书
顶岗实习计划书
2015/01/16 职场文书
2015年重阳节主持词
2015/07/04 职场文书