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拖拽组件
Jul 28 Javascript
基于jQuery实现的双11天猫拆红包抽奖效果
Dec 01 Javascript
详解JavaScript时间格式化
Dec 23 Javascript
修改Jquery Dialog 位置的实现方法
Aug 26 Javascript
jquery 手势密码插件
Mar 17 Javascript
AngularJs导出数据到Excel的示例代码
Aug 11 Javascript
JavaScript中join()、splice()、slice()和split()函数用法示例
Aug 24 Javascript
vue拖拽组件使用方法详解
Dec 01 Javascript
JS使用Prim算法和Kruskal算法实现最小生成树
Jan 17 Javascript
jquery实现的分页显示功能示例
Aug 23 jQuery
Vue项目vscode 安装eslint插件的方法(代码自动修复)
Apr 15 Javascript
vue项目中微信登录的实现操作
Sep 08 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
天使彦史上最神还原,性别曝光的那一刻,百万网友恋爱了
2020/03/02 国漫
全国FM电台频率大全 - 7 吉林省
2020/03/11 无线电
从MySQL数据库表中取出随机数据的代码
2007/09/05 PHP
PHP 向右侧拉菜单实现代码,测试使用中
2009/11/03 PHP
php实现通用的信用卡验证类
2015/03/24 PHP
PHP异常处理Exception类
2015/12/11 PHP
Laravel jwt 多表(多用户端)验证隔离的实现
2019/12/18 PHP
Prototype Date对象 学习
2009/07/12 Javascript
js实现的真正的iframe高度自适应(兼容IE,FF,Opera)
2010/03/07 Javascript
js 居中漂浮广告
2010/03/21 Javascript
JavaScript设计模式之装饰者模式介绍
2014/12/28 Javascript
jQuery使用slideUp方法实现控制元素缓慢收起
2015/03/27 Javascript
jQuery实现的仿select功能代码
2015/08/19 Javascript
JavaScript判断用户名和密码不能为空的实现代码
2016/05/16 Javascript
JavaScript实现页面定时刷新(定时器,meta)
2016/10/12 Javascript
ajax异步请求详解
2017/01/06 Javascript
基于jQuery插件jqzoom实现的图片放大镜效果示例
2017/01/23 Javascript
Javascript中Promise的四种常用方法总结
2017/07/14 Javascript
手把手教你vue-cli单页到多页应用的方法
2018/05/31 Javascript
使用vue-router完成简单导航功能【推荐】
2018/06/28 Javascript
vue+Element中table表格实现可编辑(select下拉框)
2020/05/21 Javascript
[01:08:48]LGD vs OG 2018国际邀请赛淘汰赛BO3 第三场 8.25
2018/08/29 DOTA
使用python实现链表操作
2018/01/26 Python
查看Django和flask版本的方法
2018/05/14 Python
Python求一批字符串的最长公共前缀算法示例
2019/03/02 Python
django最快程序开发流程详解
2019/07/19 Python
如何实现Django Rest framework版本控制
2019/07/25 Python
解析Python3中的Import
2019/10/13 Python
详解Python 重学requests发起请求的基本方式
2020/02/07 Python
法人代表委托书
2014/04/04 职场文书
信息技术课后反思
2014/04/27 职场文书
办公室领导干部作风整顿个人整改措施
2014/09/17 职场文书
2014年采购工作总结
2014/11/20 职场文书
大学毕业晚会开场白
2015/05/29 职场文书
企业文化学习心得体会
2016/01/21 职场文书
Redis keys命令的具体使用
2022/06/05 Redis