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 相关文章推荐
一个不错的应用,用于提交获取文章内容,不推荐用
Mar 03 Javascript
jQuery Ajax 实例全解析
Apr 20 Javascript
JavaScript解析URL参数示例代码
Aug 12 Javascript
禁止空格提交表单的js代码
Nov 17 Javascript
从js向Action传中文参数出现乱码问题的解决方法
Dec 29 Javascript
常规表格多表头查询示例
Feb 21 Javascript
JavaScript中使用ActiveXObject操作本地文件夹的方法
Mar 28 Javascript
开源的javascript项目Kissy介绍
Nov 28 Javascript
FullCalendar日历插件应用之数据展现(一)
Dec 23 Javascript
jQuery根据表单name获取值的方法
May 24 Javascript
微信小程序淘宝首页双排图片布局排版代码(推荐)
Oct 29 Javascript
vue3.0自定义指令(drectives)知识点总结
Dec 27 Vue.js
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
解析zend Framework如何自动加载类
2013/06/28 PHP
php加密算法之实现可逆加密算法和解密分享
2014/01/21 PHP
自己写的兼容低于PHP 5.5版本的array_column()函数
2014/10/24 PHP
PHP封装的HttpClient类用法实例
2015/06/17 PHP
详细解读php的命名空间(一)
2018/02/21 PHP
PHP中类与对象功能、用法实例解读
2020/03/27 PHP
JavaScript高级程序设计 读书笔记之十 本地对象Date日期
2012/02/27 Javascript
jQuery Tools tooltip使用说明
2012/07/14 Javascript
JavaScript知识点总结(五)之Javascript中两个等于号(==)和三个等于号(===)的区别
2016/05/31 Javascript
Jquery把获取到的input值转换成json
2017/05/15 jQuery
node.js实现的装饰者模式示例
2017/09/06 Javascript
JS实现手写parseInt的方法示例
2017/09/24 Javascript
利用vue组件自定义v-model实现一个Tab组件方法示例
2017/12/06 Javascript
layer弹出层 iframe层去掉滚动条的实例代码
2018/08/17 Javascript
jQuery序列化form表单数据为JSON对象的实现方法
2018/09/20 jQuery
nodejs dgram模块广播+组播的实现示例
2019/11/04 NodeJs
python中使用OpenCV进行人脸检测的例子
2014/04/18 Python
机器学习python实战之决策树
2017/11/01 Python
Java及python正则表达式详解
2017/12/27 Python
Python使用cx_Oracle模块操作Oracle数据库详解
2018/05/07 Python
Python 面试中 8 个必考问题
2018/11/16 Python
python打开windows应用程序的实例
2019/06/28 Python
python实现百度OCR图片识别过程解析
2020/01/17 Python
pandas to_excel 添加颜色操作
2020/07/14 Python
python 实现aes256加密
2020/11/27 Python
享誉全球的多元化时尚精品购物平台:Farfetch发发奇(支持中文)
2017/08/08 全球购物
洲际酒店集团美国官网:IHG美国
2017/11/16 全球购物
Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别?用contains来区分是否有重复的对象。还是都不用
2013/07/30 面试题
递归实现回文判断(如:abcdedbca就是回文,判断一个面试者对递归理解的简单程序)
2013/04/28 面试题
大学新生军训个人的自我评价
2013/10/03 职场文书
手机被没收检讨书
2014/02/22 职场文书
教师师德师风整改措施
2014/10/24 职场文书
爱情保证书
2015/01/17 职场文书
python正则表达式re.search()的基本使用教程
2021/05/21 Python
mysql left join快速转inner join的过程
2021/06/30 MySQL
python+opencv实现目标跟踪过程
2022/06/21 Python