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的parseFloat()方法精度问题探讨
Nov 26 Javascript
原生JS操作网页给p元素添加onclick事件及表格隔行变色
Dec 01 Javascript
利用Jquery实现可多选的下拉框
Feb 21 Javascript
使用jQueryMobile实现滑动翻页效果的方法
Feb 04 Javascript
jQuery实现在列表的首行添加数据
May 19 Javascript
javascript实现的全国省市县无刷新多级关联菜单效果代码
Aug 01 Javascript
浅谈时钟的生成(js手写简洁代码)
Aug 20 Javascript
详解jQuery同步Ajax带来的UI线程阻塞问题及解决办法
Aug 09 jQuery
canvas基础绘制-绚丽倒计时的实例
Sep 17 Javascript
Angular5中调用第三方js插件的方法
Feb 26 Javascript
Vue递归实现树形菜单方法实例
Nov 06 Javascript
VUE+elementui面包屑实现动态路由详解
Nov 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函数serialize()与unserialize()用法实例
2014/11/06 PHP
PHP积分兑换接口实例
2015/02/09 PHP
ZendFramework框架实现连接两个或多个数据库的方法
2016/12/08 PHP
如何实现JS函数的重载
2006/09/22 Javascript
使用js解决由border属性引起的div宽度问题
2013/11/26 Javascript
Bootstrap模仿起筷首页效果
2016/05/09 Javascript
javascript中Number的方法小结
2016/11/21 Javascript
BootStrap selectpicker后台动态绑定数据
2017/06/01 Javascript
JavaScript设计模式之代理模式详解
2017/06/09 Javascript
vue在使用ECharts时的异步更新和数据加载详解
2017/11/22 Javascript
新版vue-cli模板下本地开发环境使用node服务器跨域的方法
2018/04/03 Javascript
vue 2.1.3 实时显示当前时间,每秒更新的方法
2018/09/16 Javascript
实例讲解vue源码架构
2019/01/24 Javascript
vue下载excel的实现代码后台用post方法
2019/05/10 Javascript
js实现无限瀑布流实例方法
2019/09/16 Javascript
jQuery中event.target和this的区别详解
2020/08/13 jQuery
[49:41]NB vs NAVI Supermajor小组赛A组 BO3 第一场 6.2
2018/06/03 DOTA
使用pyecharts无法import Bar的解决方案
2020/04/23 Python
Python错误提示:[Errno 24] Too many open files的分析与解决
2017/02/16 Python
python实现rsa加密实例详解
2017/07/19 Python
python实现用户管理系统
2018/01/10 Python
python爬取网易云音乐评论
2018/11/16 Python
python 通过视频url获取视频的宽高方式
2019/12/10 Python
Python使用socketServer包搭建简易服务器过程详解
2020/06/12 Python
零基础学python应该从哪里入手
2020/08/11 Python
美国高端牛仔品牌:Silver Jeans
2019/12/12 全球购物
华硕新加坡官方网上商店:ASUS Singapore
2020/07/09 全球购物
园林设计师自荐信
2013/11/18 职场文书
应届毕业生专业个人求职自荐信格式
2013/11/20 职场文书
电气个人求职信范文
2014/02/04 职场文书
乡镇领导班子批评与自我批评材料
2014/09/23 职场文书
国庆节标语大全
2014/10/08 职场文书
员工表扬信怎么写
2015/05/05 职场文书
2016年小学端午节活动总结
2016/04/01 职场文书
PHP实现两种排课方式
2021/06/26 PHP
mysql 获取时间方式
2022/03/20 MySQL