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+CSS制作DIV层可(最小化/拖拽/排序)功能实现代码
Feb 25 Javascript
Jquery实现弹出层分享微博插件具备动画效果
Apr 03 Javascript
cookie的复制与使用记住用户名实现代码
Nov 04 Javascript
javascript的回调函数应用示例
Feb 20 Javascript
jquery 页眉单行信息滚动显示实现思路及代码
Jun 26 Javascript
JS 排序输出实现table行号自增前端动态生成的tr
Aug 13 Javascript
jQuery取消ajax请求的方法
Jun 09 Javascript
学习JavaScript设计模式(继承)
Nov 26 Javascript
JavaScript使用DeviceOne开发实战(一) 配置和起步
Dec 01 Javascript
jQuery轮播图效果精简版完整示例
Sep 04 Javascript
详解微信小程序 登录获取unionid
Jun 27 Javascript
react+ant design实现Table的增、删、改的示例代码
Dec 27 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 trim 去除空字符的定义与语法介绍
2010/05/31 PHP
PHP与Java进行通信的实现方法
2013/10/21 PHP
php阻止页面后退的方法分享
2014/02/17 PHP
PHP版本的选择5.2.17 5.3.27 5.3.28 5.4 5.5兼容性问题分析
2016/04/04 PHP
PHP中静态变量的使用方法实例分析
2016/12/01 PHP
DOM 基本方法
2009/07/18 Javascript
javascript 文件的同步加载与异步加载实现原理
2012/12/13 Javascript
caller和callee的区别介绍及演示结果
2013/03/10 Javascript
当鼠标移动时出现特效的JQuery代码
2013/11/08 Javascript
jquery给图片添加鼠标经过时的边框效果
2013/11/12 Javascript
JS表的模拟方法
2015/02/05 Javascript
JS采用绝对定位实现回到顶部效果完整实例
2016/06/20 Javascript
原生js实现无缝轮播图效果
2017/01/11 Javascript
基于Bootstrap的Java开发问题汇总(Spring MVC)
2017/01/15 Javascript
详解jQuery中关于Ajax的几个常用的函数
2017/07/17 jQuery
node 命令方式启动修改端口的方法
2018/05/12 Javascript
深入理解JavaScript 中的匿名函数((function() {})();)与变量的作用域
2018/08/28 Javascript
Vuex 快速入门(简单易懂)
2018/09/20 Javascript
Bootstrap Paginator+PageHelper实现分页效果
2018/12/29 Javascript
VUE单页面切换动画代码(全网最好的切换效果)
2019/10/31 Javascript
vue使用canvas实现移动端手写签名
2020/09/22 Javascript
原生js实现自定义消息提示框
2020/11/19 Javascript
[01:09:50]VP vs Pain 2018国际邀请赛小组赛BO2 第二场
2018/08/20 DOTA
Python中使用HTMLParser解析html实例
2015/02/08 Python
python绘图方法实例入门
2015/05/19 Python
Python写的一个简单监控系统
2015/06/19 Python
详解Django之admin组件的使用和源码剖析
2018/05/04 Python
Python 正则表达式匹配字符串中的http链接方法
2018/12/25 Python
python tornado修改log输出方式
2019/11/18 Python
Python使用psutil获取进程信息的例子
2019/12/17 Python
Django celery异步任务实现代码示例
2020/11/26 Python
旅游管理专业个人求职信范文
2013/12/24 职场文书
市场安全管理制度
2014/01/26 职场文书
小学校长竞聘演讲稿
2014/05/16 职场文书
文明寝室标语
2014/06/13 职场文书
大学生个人简历自我评价
2015/03/11 职场文书