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 相关文章推荐
jquery 操作DOM案例代码分享
Apr 05 Javascript
Javascript的&amp;&amp;和||的另类用法
Jul 23 Javascript
angularjs指令中的compile与link函数详解
Dec 06 Javascript
JavaScript限定图片显示大小的方法
Mar 11 Javascript
jQuery实现带幻灯的tab滑动切换风格菜单代码
Aug 27 Javascript
一分钟理解js闭包
May 04 Javascript
jQuery四种选择器使用及示例
Jun 05 Javascript
JS实现弹出下载对话框及常见文件类型的下载
Jul 13 Javascript
JavaScript实现微信号随机切换代码
Mar 09 Javascript
Webpack 之 babel-loader文件预处理器详解
Mar 23 Javascript
详解Angular-ui-BootStrap组件的解释以及使用
Jul 13 Javascript
layui弹出框Tab选项卡的示例代码
Sep 04 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 文件上传源码分析(RFC1867)
2009/10/30 PHP
使用PHP破解防盗链图片的一个简单方法
2014/06/07 PHP
PHP基于yii框架实现生成ICO图标
2015/11/13 PHP
yii2 页面底部加载css和js的技巧
2016/04/21 PHP
php基于mcrypt_encrypt和mcrypt_decrypt实现字符串加密解密的方法
2016/07/12 PHP
Jquery ThickBox插件使用心得(不建议使用)
2010/09/08 Javascript
Jquery 获取checkbox的checked问题
2011/11/16 Javascript
浅谈jQuery中setInterval()方法
2015/07/07 Javascript
Bootstrap每天必学之下拉菜单
2015/11/25 Javascript
jquery validate表单验证的基本用法入门
2016/01/18 Javascript
angular2+nodejs实现图片上传功能
2017/03/27 NodeJs
vue.js 微信支付前端代码分享
2018/02/10 Javascript
浅谈Vue网络请求之interceptors实际应用
2018/02/28 Javascript
微信小程序页面调用自定义组件内的事件详解
2019/09/12 Javascript
基于vue-cli3+typescript的tsx开发模板搭建过程分享
2020/02/28 Javascript
国内常用的js类库大全(CDN公共库)
2020/06/24 Javascript
JQuery+drag.js上传图片并且实现图片拖曳
2020/11/18 jQuery
简单介绍Python中的round()方法
2015/05/15 Python
python实现线程池的方法
2015/06/30 Python
Python基础语法(Python基础知识点)
2016/02/28 Python
Python编程实现的简单神经网络算法示例
2018/01/26 Python
python3获取当前文件的上一级目录实例
2018/04/26 Python
Python实现ping指定IP的示例
2018/06/04 Python
Numpy中矩阵matrix读取一列的方法及数组和矩阵的相互转换实例
2018/07/02 Python
python调用外部程序的实操步骤
2019/03/04 Python
Python内置random模块生成随机数的方法
2019/05/31 Python
利用anaconda作为python的依赖库管理方法
2019/08/13 Python
基于Python实现天天酷跑功能
2021/01/06 Python
六查六看自查材料
2014/02/17 职场文书
计算机专业自荐信范文
2014/05/28 职场文书
高中国旗下的演讲稿
2014/08/28 职场文书
大学生考试作弊检讨书1000字
2014/10/14 职场文书
详解Nginx启动失败的几种错误处理
2021/04/01 Servers
Golang 正则匹配效率详解
2021/04/25 Golang
java泛型通配符详解
2021/07/25 Java/Android
MySQL利用UNION连接2个查询排序失效详解
2021/11/20 MySQL