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 相关文章推荐
网页编辑器ckeditor和ckfinder配置步骤分享
May 24 Javascript
两个select多选模式的选项相互移动(示例代码)
Jan 11 Javascript
JavaScript获取网页中第一个链接ID的方法
Apr 03 Javascript
基于jQuery插件实现点击小图显示大图效果
May 11 Javascript
轻松掌握jQuery中wrap()与unwrap()函数的用法
May 24 Javascript
[js高手之路]从原型链开始图解继承到组合继承的产生详解
Aug 28 Javascript
微信小程序左右滑动的实现代码
Dec 15 Javascript
JavaScript对象拷贝与赋值操作实例分析
Dec 10 Javascript
VUE解决微信签名及SPA微信invalid signature问题(完美处理)
Mar 29 Javascript
用JS实现一个简单的打砖块游戏
Dec 11 Javascript
详解如何使用React Hooks请求数据并渲染
Oct 18 Javascript
如何基于viewport vm适配移动端页面
Nov 13 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 urlencode()与urldecode()函数字符编码原理详解
2011/12/06 PHP
PHP获取文件后缀名的三个函数
2012/10/15 PHP
php类自动装载、链式操作、魔术方法实现代码
2017/07/23 PHP
仿当当网淘宝网等主流电子商务网站商品分类导航菜单
2013/09/25 Javascript
jQuery控制TR显示隐藏的三种常用方法
2014/08/21 Javascript
jQuery实现为图片添加镜头放大效果的方法
2015/06/25 Javascript
jQuery+CSS3实现3D立方体旋转效果
2015/11/10 Javascript
JavaScript 2048 游戏实例代码(简单易懂)
2016/03/25 Javascript
原生js实现class的添加和删除简单代码
2016/07/12 Javascript
js轮播图代码分享
2016/07/14 Javascript
微信小程序之小豆瓣图书实例
2016/11/30 Javascript
js实现华丽的九九乘法表效果
2017/03/29 Javascript
Javascript中parseInt的正确使用方式
2018/10/17 Javascript
微信小程序ibeacon三点定位详解
2018/10/31 Javascript
JS实现根据详细地址获取经纬度功能示例
2019/04/16 Javascript
Async/Await替代Promise的6个理由
2019/06/15 Javascript
vue点击按钮动态创建与删除组件功能
2019/12/29 Javascript
vue实现打地鼠小游戏
2020/08/21 Javascript
[46:48]DOTA2上海特级锦标赛A组小组赛#2 Secret VS CDEC第三局
2016/02/25 DOTA
浅谈Python NLP入门教程
2017/12/25 Python
详解python3中zipfile模块用法
2018/06/18 Python
Python迭代器与生成器用法实例分析
2018/07/09 Python
解决django接口无法通过ip进行访问的问题
2020/03/27 Python
柯基袜:Corgi Socks
2017/01/26 全球购物
Veronica Beard官网:在酷、经典和别致之间找到了平衡
2018/01/11 全球购物
SHEIN台湾:购买最新流行女装服饰
2019/05/18 全球购物
婚前财产公证书
2014/04/10 职场文书
2014年党课学习心得体会
2014/07/08 职场文书
尊老爱亲美德少年事迹材料
2014/08/14 职场文书
上课迟到检讨书300字
2014/10/15 职场文书
2014年汽车销售工作总结
2014/12/01 职场文书
优秀教师个人材料
2014/12/15 职场文书
新郎接新娘保证书
2015/05/08 职场文书
读《工匠精神》有感:热爱工作,精益求精
2019/12/28 职场文书
python如何正确使用yield
2021/05/21 Python
python实现学生信息管理系统(面向对象)
2022/06/05 Python