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 相关文章推荐
JavaScript 高级语法介绍
Jun 15 Javascript
修改好的jquery滚动字幕效果实现代码
Jun 22 Javascript
jquery索引在使用中的一些困惑
Oct 24 Javascript
禁止ajax缓存获取程序最新数据的方法
Nov 19 Javascript
整理的比较全的event对像在ie与firefox浏览器中的区别
Nov 25 Javascript
JavaScript制作windows经典扫雷小游戏
Mar 31 Javascript
jquery的幻灯片图片切换效果代码分享
Sep 07 Javascript
jQuery mobile转换url地址及获取url中目录部分的方法
Dec 04 Javascript
基于JavaScript实现跳转提示页面
Sep 24 Javascript
jQuery自定义多选下拉框效果
Jun 19 jQuery
浅谈React之状态(State)
Sep 19 Javascript
jQuery实现简单轮播图效果
Dec 27 jQuery
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通过header实现文本文件下载的代码
2010/08/08 PHP
常用PHP数组排序函数归纳
2016/08/08 PHP
浅谈htmlentities 、htmlspecialchars、addslashes的使用方法
2016/12/09 PHP
How to Auto Include a Javascript File
2007/02/02 Javascript
IE与firefox之jquery用法区别
2008/10/03 Javascript
IE和FireFox(FF)中js和css的不同
2009/04/13 Javascript
Jquery中显示隐藏的实现代码分析
2011/07/26 Javascript
javascript实现跳转菜单的具体方法
2013/07/05 Javascript
cookie的复制与使用记住用户名实现代码
2013/11/04 Javascript
javascript + jquery实现定时修改文章标题
2014/03/19 Javascript
模拟用户点击弹出新页面不会被浏览器拦截
2014/04/08 Javascript
js怎么覆盖原有方法实现重写
2014/09/04 Javascript
IE及IE6浏览器中判断JS文件加载成功失败的方法
2015/02/18 Javascript
跟我学习javascript创建对象(类)的8种方法
2015/11/20 Javascript
JS实现把鼠标放到链接上出现滚动文字的方法
2016/04/06 Javascript
JS判断iframe是否加载完成的方法
2016/08/03 Javascript
js防阻塞加载的实现方法
2016/09/09 Javascript
JS实现密码框的显示密码和隐藏密码功能示例
2016/12/26 Javascript
React Native 使用Fetch发送网络请求的示例代码
2017/12/02 Javascript
create-react-app 修改为多入口编译的方法
2018/08/01 Javascript
[02:04]2014DOTA2国际邀请赛 DK一个时代的落幕
2014/07/21 DOTA
在Python中使用判断语句和循环的教程
2015/04/25 Python
Python的迭代器和生成器
2015/07/29 Python
详解python深浅拷贝区别
2019/06/24 Python
Python流程控制 while循环实现解析
2019/09/02 Python
python爬取本站电子书信息并入库的实现代码
2020/01/20 Python
python通用读取vcf文件的类(复制粘贴即可用)
2020/02/29 Python
纯CSS实现的大小渐变、渐远效果
2014/04/15 HTML / CSS
英国家喻户晓的折扣商场:TK Maxx
2017/05/26 全球购物
英国第一豪华护肤品牌:Elemis
2017/10/12 全球购物
Agoda.com官方网站:便宜预订全球酒店,高达80%的折扣
2018/04/04 全球购物
澳大利亚设计的婴儿和女孩的衣服:Oobi
2018/12/16 全球购物
应届生个人求职信模板
2013/11/26 职场文书
白酒业务员岗位职责
2013/12/27 职场文书
2015年汽车销售经理工作总结
2015/04/27 职场文书
党员干部学习十八届五中全会精神心得体会
2016/01/05 职场文书