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去掉空格的方法集合
Dec 28 Javascript
JQuery实现动态添加删除评论的方法
May 18 Javascript
cocos2dx骨骼动画Armature源码剖析(三)
Sep 08 Javascript
JavaScript阻止回车提交表单的方法
Dec 30 Javascript
深入理解setTimeout函数和setInterval函数
May 20 Javascript
vue.js框架实现表单排序和分页效果
Aug 09 Javascript
jQuery实现简单日期格式化功能示例
Sep 19 jQuery
详解vue中axios的封装
Jul 18 Javascript
vue eslint简要配置教程详解
Jul 26 Javascript
JavaScript实现电灯开关小案例
Mar 30 Javascript
JavaScript中使用Spread运算符的八种方法总结
Jun 18 Javascript
JQuery绑定事件四种实现方法解析
Dec 02 jQuery
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
spl_autoload_register与autoload的区别详解
2013/06/03 PHP
PHP获取数组中重复最多的元素的实现方法
2014/11/11 PHP
PHP实现四种基础排序算法的运行时间比较(推荐)
2016/08/11 PHP
PHPCMS V9 添加二级导航的思路详解
2016/10/20 PHP
php curl优化下载微信头像的方法总结
2018/09/07 PHP
PHP代码加密的方法总结
2020/03/13 PHP
Jqyery中同等与js中windows.onload的应用
2011/05/10 Javascript
EasyUI的treegrid组件动态加载数据问题的解决办法
2011/12/11 Javascript
jquery 操作日期、星期、元素的追加的实现代码
2012/02/07 Javascript
浅谈jQuery中 wrap() wrapAll() 与 wrapInner()的差异
2014/11/12 Javascript
JavaScript实现带播放列表的音乐播放器实例分享
2016/03/07 Javascript
简单实现js间歇或无缝滚动效果
2016/06/29 Javascript
深入浅析var,let,const的异同点
2018/08/07 Javascript
记录vue项目中遇到的一点小问题
2019/05/14 Javascript
node.js中对Event Loop事件循环的理解与应用实例分析
2020/02/14 Javascript
vue-cli 关闭热更新操作
2020/09/18 Javascript
ReactRouter的实现方法
2021/01/25 Javascript
深入理解javascript中的this
2021/02/08 Javascript
[01:03:18]DOTA2-DPC中国联赛 正赛 RNG vs Dynasty BO3 第一场 1月29日
2021/03/11 DOTA
python在linux中输出带颜色的文字的方法
2014/06/19 Python
Python创建日历实例
2014/08/21 Python
深入解析Python中的WSGI接口
2015/05/11 Python
python图像处理之镜像实现方法
2015/05/30 Python
使用Python对Dicom文件进行读取与写入的实现
2020/04/20 Python
基于FME使用Python过程图解
2020/05/13 Python
常用的10个Python实用小技巧
2020/08/10 Python
详解HTML5表单新增属性
2016/12/21 HTML / CSS
Whistles官网:英国女装品牌
2020/08/14 全球购物
如果NULL和0作为空指针常数是等价的,那我到底该用哪一个
2014/09/16 面试题
个人能力自我鉴赏
2014/01/25 职场文书
黄金搭档广告词
2014/03/21 职场文书
安全生产月活动总结
2014/05/04 职场文书
运动会口号8字
2014/06/07 职场文书
城市规划应届毕业生自荐信
2014/07/04 职场文书
师德师风学习材料
2014/12/19 职场文书
2016年五四青年节校园广播稿
2015/12/17 职场文书