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 相关文章推荐
给Function做的OOP扩展
May 07 Javascript
防止jQuery ajax Load使用缓存的方法小结
Feb 22 Javascript
node.js中的url.parse方法使用说明
Dec 10 Javascript
JS实现的最简Table选项卡效果
Oct 14 Javascript
JS实现获取键盘按下的按键并显示在页面上的方法
Nov 04 Javascript
三种Node.js写文件的方式
Mar 08 Javascript
JavaScript禁止用户多次提交的两种方法
Jul 24 Javascript
D3.js实现散点图和气泡图的方法详解
Sep 21 Javascript
jQuery插件FusionCharts绘制的2D条状图效果【附demo源码】
May 13 jQuery
在Vue 中使用Typescript的示例代码
Sep 10 Javascript
浅谈目前可以使用ES10的5个新特性
Jun 25 Javascript
bootstrap-table+treegrid实现树形表格
Jul 26 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
ThinkPHP分组下自定义标签库实例
2014/11/01 PHP
thinkphp连贯操作实例分析
2014/11/22 PHP
PHP浮点比较大小的方法
2016/02/14 PHP
Ajax中的JSON格式与php传输过程全面解析
2017/11/14 PHP
ThinkPhP+Apache+PHPstorm整合框架流程图解
2020/11/23 PHP
如何实现iframe(嵌入式帧)的自适应高度
2006/07/26 Javascript
Jquery知识点三 jquery表单对象操作
2011/01/17 Javascript
Jquery实现三层遍历删除功能代码
2013/04/23 Javascript
用JavaScript修改CSS属性的代码
2013/05/06 Javascript
浅析js预加载/延迟加载
2014/09/25 Javascript
JavaScript原生对象之Number对象的属性和方法详解
2015/03/13 Javascript
实现placeholder效果的方案汇总
2015/06/11 Javascript
javascript实现框架高度随内容改变的方法
2015/07/23 Javascript
提高jQuery性能优化的技巧
2015/08/03 Javascript
jQuery表格插件datatables用法详解
2020/11/23 Javascript
JavaScript禁止复制与粘贴的实现代码
2016/05/16 Javascript
JavaScript数据结构之广义表的定义与表示方法详解
2017/04/12 Javascript
JavaScript之filter_动力节点Java学院整理
2017/06/28 Javascript
es7学习教程之Decorators(修饰器)详解
2017/07/21 Javascript
给Python IDLE加上自动补全和历史功能
2014/11/30 Python
Python MySQLdb Linux下安装笔记
2015/05/09 Python
详解pyinstaller selenium python3 chrome打包问题
2019/10/18 Python
详解python中各种文件打开模式
2020/01/19 Python
Django 实现 Websocket 广播、点对点发送消息的代码
2020/06/03 Python
美国男士内衣品牌:Tommy John
2017/12/22 全球购物
Zalando Lounge瑞士:时尚与生活方式购物俱乐部
2020/03/12 全球购物
广州一家公司的.NET面试题
2016/06/11 面试题
下面代码从性能上考虑,有什么问题
2015/04/03 面试题
什么是servlet
2012/05/08 面试题
白酒市场营销方案
2014/02/25 职场文书
爱国演讲稿500字
2014/05/04 职场文书
万里长城导游词
2015/01/30 职场文书
2015年卫生监督工作总结
2015/05/21 职场文书
2015年留守儿童工作总结
2015/05/22 职场文书
班级元旦晚会开幕词
2016/03/04 职场文书
Python实现批量自动整理文件
2022/03/16 Python