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 相关文章推荐
屏蔽鼠标右键、Ctrl+n、shift+F10、F5刷新、退格键 的javascript代码
Apr 01 Javascript
一些常用的JS功能函数(2009-06-04更新)
Jun 04 Javascript
JavaScript排序算法之希尔排序的2个实例
Apr 04 Javascript
javascript实现捕捉键盘上按下的键
May 05 Javascript
JS实现黑客帝国文字下落效果
Sep 01 Javascript
js 基础篇必看(点击事件轮播图的简单实现)
Aug 20 Javascript
利用js判断手机是否安装某个app的多种方案
Feb 13 Javascript
浅析Angular2子模块以及异步加载
Apr 24 Javascript
node 利用进程通信实现Cluster共享内存
Oct 27 Javascript
详释JavaScript执行环境与执行栈
Apr 02 Javascript
关于layui 实现点击按钮添加一行(方法渲染创建的table)
Sep 29 Javascript
基于ajax实现上传图片代码示例解析
Dec 03 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数组函数序列之krsort()- 对数组的元素键名进行降序排序,保持索引关系
2011/11/02 PHP
php实现文件编码批量转换
2014/03/10 PHP
js最简单的拖拽效果实现代码
2010/09/24 Javascript
读jQuery之六 缓存数据功能介绍
2011/06/21 Javascript
通过Javascript创建一个选择文件的对话框代码
2012/06/16 Javascript
Javascript中各种trim的实现详细解析
2013/12/10 Javascript
jQuery实现视频作为全屏幕背景
2014/12/18 Javascript
jQuery实现返回顶部效果的方法
2015/05/29 Javascript
JavaScript代码判断输入的字符串是否含有特殊字符和表情代码实例
2017/08/17 Javascript
微信小程序使用canvas自适应屏幕画海报并保存图片功能
2019/07/25 Javascript
layui之table checkbox初始化时选中对应选项的方法
2019/09/02 Javascript
jquery.tagsinput.js实现记录checkbox勾选的顺序
2019/09/21 jQuery
webgl实现物体描边效果的方法介绍
2019/11/27 Javascript
js事件机制----捕获与冒泡机制实例分析
2020/05/22 Javascript
使用beaker让Facebook的Bottle框架支持session功能
2015/04/23 Python
tornado 多进程模式解析
2018/01/15 Python
python实现图书馆研习室自动预约功能
2018/04/27 Python
python3中的md5加密实例
2018/05/29 Python
实例讲解Python爬取网页数据
2018/07/08 Python
tensorflow更改变量的值实例
2018/07/30 Python
python 多线程重启方法
2019/02/18 Python
Python机器学习算法库scikit-learn学习之决策树实现方法详解
2019/07/04 Python
python调用接口的4种方式代码实例
2019/11/19 Python
用openCV和Python 实现图片对比,并标识出不同点的方式
2019/12/19 Python
用pushplus+python监控亚马逊到货动态推送微信
2021/01/29 Python
CSS3实现div从下往上滑入滑出效果示例
2020/04/28 HTML / CSS
Skechers越南官方网站:来自美国的运动休闲品牌
2021/02/22 全球购物
serialVersionUID具有什么样的特征
2014/02/20 面试题
自我鉴定模板
2013/10/29 职场文书
应届毕业生专业个人求职自荐信格式
2013/11/20 职场文书
酒吧副总经理岗位职责
2013/12/10 职场文书
大学生助学金感谢信
2015/01/21 职场文书
社区义诊通知
2015/04/24 职场文书
浅谈Vue的computed计算属性
2022/03/21 Vue.js
Oracle使用别名的好处
2022/04/19 Oracle
Promise静态四兄弟实现示例详解
2022/07/07 Javascript