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文件里远程调用jquery.js会在ie8下的一个奇怪问题
Nov 28 Javascript
IE6 hack for js 集锦
Sep 23 Javascript
深入理解JavaScript系列(48):对象创建模式(下篇)
Mar 04 Javascript
在Node.js中使用HTTP上传文件的方法
Jun 23 Javascript
基于jquery实现鼠标左右拖动滑块滑动附源码下载
Dec 23 Javascript
JS+CSS实现DIV层的展开、收缩效果
Jan 28 Javascript
js数组常用操作方法小结(增加,删除,合并,分割等)
Aug 02 Javascript
Bootstrap基本组件学习笔记之按钮组(8)
Dec 07 Javascript
IntersectionObserver实现图片懒加载的示例
Sep 29 Javascript
JS引用传递与值传递的区别与用法分析
Jun 01 Javascript
JS求1到任意数之间的所有质数的方法详解
May 20 Javascript
三种方式清除vue路由跳转router-link的历史记录
Apr 10 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
生成静态页面的PHP类
2006/07/15 PHP
PHP获取浏览器信息类和客户端地理位置的2个方法
2014/04/24 PHP
jquery tablesorter.js 支持中文表格排序改进
2009/12/09 Javascript
javascript 利用Image对象实现的埋点(某处的点击数)统计
2012/12/28 Javascript
JavaScript中用于生成随机数的Math.random()方法
2015/06/15 Javascript
jquery密码强度校验
2015/12/02 Javascript
深入浅析JavaScript字符串操作方法 slice、substr、substring及其IE兼容性
2015/12/16 Javascript
JavaScript简单下拉菜单特效
2016/09/13 Javascript
jQuery中Find选择器用法示例
2016/09/21 Javascript
利用jQuery插件imgAreaSelect实现获得选择域的图像信息
2016/12/02 Javascript
jQuery自定义图片上传插件实例代码
2017/04/04 jQuery
web前端开发中常见的多列布局解决方案整理(一定要看)
2017/10/15 Javascript
js 公式编辑器 - 自定义匹配规则 - 带提示下拉框 - 动态获取光标像素坐标
2018/01/04 Javascript
vue插件--仿微信小程序showModel实现模态提示窗功能
2020/08/19 Javascript
通过实例解析JavaScript常用排序算法
2020/09/02 Javascript
Antd的table组件表格的序号自增操作
2020/10/27 Javascript
python操作数据库之sqlite3打开数据库、删除、修改示例
2014/03/13 Python
Python六大开源框架对比
2015/10/19 Python
Python守护进程和脚本单例运行详解
2017/01/06 Python
100行python代码实现跳一跳辅助程序
2018/01/15 Python
在python中修改.properties文件的操作
2020/04/08 Python
如何基于Python爬虫爬取美团酒店信息
2020/11/03 Python
Python调用系统命令os.system()和os.popen()的实现
2020/12/31 Python
Snapfish英国:在线照片打印和个性化照片礼品
2017/01/13 全球购物
adidas马来西亚官网:adidas MY
2020/09/12 全球购物
2014年党员承诺书范文
2014/05/20 职场文书
财务管理专业求职信
2014/06/11 职场文书
基层党建工作汇报材料
2014/08/15 职场文书
面试通知短信
2015/04/20 职场文书
2016年教师学习教师法心得体会
2016/01/20 职场文书
创业计划之特色精品店
2019/08/12 职场文书
iPhone13 Pro外观确定,升级4800万镜头,4月20日发新品
2021/04/15 数码科技
Python绘制分类图的方法
2021/04/20 Python
JS中一些高效的魔法运算符总结
2021/05/06 Javascript
【海涛解说】pis亲自推荐,其实你从来不会玩NW
2022/04/01 DOTA
win10截图快捷键win+shift+s没有反应无法截图怎么解决?
2022/08/14 数码科技