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实现的一个include函数
Jul 21 Javascript
jQuery 点击图片跳转上一张或下一张功能的实现代码
Mar 12 Javascript
JSQL SQLProxy 的 php 版本代码
May 05 Javascript
一行代码告别document.getElementById
Jun 01 Javascript
用window.onerror捕获并上报Js错误的方法
Jan 27 Javascript
概述javascript在Google IE中的调试技巧
Nov 24 Javascript
Ionic+AngularJS实现登录和注册带验证功能
Feb 09 Javascript
浅析vue中常见循环遍历指令的使用 v-for
Apr 18 Javascript
vue-cli 引入、配置axios的方法
May 08 Javascript
javascript数组元素删除方法delete和splice解析
Dec 09 Javascript
JavaScript设计模式之策略模式实现原理详解
May 29 Javascript
Ant Design Pro 之 ProTable使用操作
Oct 31 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开发中常用的8个小技巧
2008/08/27 PHP
php str_pad 函数使用详解
2009/01/13 PHP
PHP Array交叉表实现代码
2010/08/05 PHP
PHP.vs.JAVA
2016/04/29 PHP
Laravel框架实现简单的学生信息管理平台案例
2019/05/07 PHP
PHP数组访问常用方法解析
2020/09/05 PHP
jQuery的attr与prop使用介绍
2013/10/10 Javascript
jQuery中复合属性选择器用法实例
2014/12/31 Javascript
jquery用ajax方式从后台获取json数据后如何将内容填充到下拉列表
2015/08/26 Javascript
推荐10 个很棒的 jQuery 特效代码
2015/10/04 Javascript
三个js循环的关键字示例(for与while)
2016/02/16 Javascript
JS瀑布流实现方法实例分析
2016/12/19 Javascript
简单易懂的天气插件(代码分享)
2017/02/04 Javascript
for循环 + setTimeout 结合一些示例(前端面试题)
2017/08/30 Javascript
javascript基于牛顿迭代法实现求浮点数的平方根【递归原理】
2017/09/28 Javascript
JavaScript使用递归和循环实现阶乘的实例代码
2018/08/28 Javascript
Vue+webpack项目配置便于维护的目录结构教程详解
2018/10/14 Javascript
[08:29]DOTA2每周TOP10 精彩击杀集锦vol.7
2014/06/25 DOTA
python读取Excel实例详解
2018/08/17 Python
pyqt5 QScrollArea设置在自定义侧(任何位置)
2019/09/25 Python
Python print不能立即打印的解决方式
2020/02/19 Python
python3用PyPDF2解析pdf文件,用正则匹配数据方式
2020/05/12 Python
浅析Python面向对象编程
2020/07/10 Python
python实现跨年表白神器--你值得拥有
2021/01/04 Python
Dr.Jart+美国官网:韩国药妆品牌
2019/01/18 全球购物
印尼极简主义和实惠的在线家具店:Fabelio
2019/03/27 全球购物
Skyscanner新西兰:全球领先的旅游搜索网站
2019/08/26 全球购物
学前教育教师求职自荐信
2013/09/22 职场文书
失业者真诚求职信范文
2013/12/25 职场文书
关于建议书的格式范文
2014/05/20 职场文书
五一劳动节演讲稿
2014/09/12 职场文书
党员批评与自我批评发言材料
2014/10/14 职场文书
户外亲子活动总结
2015/05/08 职场文书
2015年第31个教师节致辞
2015/07/31 职场文书
Python 处理表格进行成绩排序的操作代码
2021/07/26 Python
MySQL中order by的使用详情
2021/11/17 MySQL