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 相关文章推荐
Javascript 正则表达式实现为数字添加千位分隔符
Mar 10 Javascript
Jquery实现动态切换图片的方法
May 18 Javascript
Bootstrap基础学习
Jun 16 Javascript
使用AngularJS创建自定义的过滤器的方法
Jun 18 Javascript
理解AngularJs篇:30分钟快速掌握AngularJs
Dec 23 Javascript
vue 中自定义指令改变data中的值
Jun 02 Javascript
详解使用vue实现tab 切换操作
Jul 03 Javascript
React-Native做一个文本输入框组件的实现代码
Aug 10 Javascript
JavaScript之创意时钟项目(实例讲解)
Oct 23 Javascript
jQuery中ajax请求后台返回json数据并渲染HTML的方法
Aug 08 jQuery
Vue+elementui 实现复杂表头和动态增加列的二维表格功能
Sep 23 Javascript
微信小程序完美解决scroll-view高度自适应问题的方法
Aug 08 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
如何开发一个虚拟域名系统
2006/10/09 PHP
找到一点可怜的关于dojo资料,谢谢作者!
2006/12/06 Javascript
表单填写时用回车代替TAB的实现方法
2007/10/09 Javascript
我见过最全的个人js加解密功能页面
2007/12/12 Javascript
JS测试显示屏分辨率以及屏幕尺寸的方法
2013/11/22 Javascript
JavaScript 里的类数组对象
2015/04/08 Javascript
微信公众平台开发教程(六)获取个性二维码的实例
2016/12/02 Javascript
基于JS实现弹出一个隐藏的div窗口body页面变成灰色并且不可被编辑
2016/12/14 Javascript
利用jQuery实现简单的拖曳效果实例代码
2017/10/20 jQuery
微信小程序button组件使用详解
2018/01/31 Javascript
微信小程序之圆形进度条实现思路
2018/02/22 Javascript
vue 组件高级用法实例详解
2018/04/11 Javascript
element vue Array数组和Map对象的添加与删除操作
2018/11/14 Javascript
Vue实现日历小插件
2019/06/26 Javascript
简单了解JavaScript sort方法
2019/11/25 Javascript
[05:00]第二届DOTA2亚洲邀请赛主赛事第三天比赛集锦.mp4
2017/04/04 DOTA
用python读写excel的方法
2014/11/18 Python
详解Python中的join()函数的用法
2015/04/07 Python
python实现简单购物商城
2016/05/21 Python
Python程序中的观察者模式结构编写示例
2016/05/27 Python
详解使用python crontab设置linux定时任务
2016/12/08 Python
详解从Django Rest Framework响应中删除空字段
2019/01/11 Python
python,Java,JavaScript实现indexOf
2020/09/09 Python
pycharm永久激活超详细教程
2020/10/29 Python
法国时尚童装网站:Melijoe
2016/08/10 全球购物
全球在线商店:BerryLook
2019/04/14 全球购物
汽车检测与维修应届毕业生求职信
2013/10/19 职场文书
开办化妆品公司创业计划书
2013/12/26 职场文书
老人节标语大全
2014/10/08 职场文书
信息合作协议书
2014/10/09 职场文书
2014年餐厅服务员工作总结
2014/11/18 职场文书
办公楼租房协议书范本
2014/11/25 职场文书
介绍信怎么写
2015/01/30 职场文书
惊天动地观后感
2015/06/10 职场文书
导游词之烟台威海蓬莱
2019/11/14 职场文书
MySQL的索引你了解吗
2022/03/13 MySQL