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系统错误:-1072896658的解决办法
Jul 08 Javascript
JavaScript中合并数组的N种方法
Sep 16 Javascript
js调用百度地图及调用百度地图的搜索功能
Sep 07 Javascript
浅析javascript异步执行函数导致的变量变化问题解决思路
May 13 Javascript
Angular2 (RC5) 路由与导航详解
Sep 21 Javascript
详解微信小程序开发—你期待的分享功能来了,微信小程序序新增5大功能
Dec 23 Javascript
javascript实现根据函数名称字符串动态执行函数的方法示例
Dec 28 Javascript
Vue 实现双向绑定的四种方法
Mar 16 Javascript
JS判断两个数组或对象是否相同的方法示例
Feb 28 Javascript
vue中的面包屑导航组件实例代码
Jul 01 Javascript
JS中的算法与数据结构之栈(Stack)实例详解
Aug 20 Javascript
基于vue.js实现购物车
Jan 15 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
中东人咖啡哲学
2021/03/03 咖啡文化
检查url链接是否已经有参数的php代码 添加 ? 或 &amp;
2010/02/09 PHP
php下通过伪造http头破解防盗链的代码
2010/07/03 PHP
解析php安全性问题中的:Null 字符问题
2013/06/21 PHP
PHP不用递归遍历目录下所有文件的代码
2014/07/04 PHP
php为字符串前后添加指定数量字符的方法
2015/05/04 PHP
一段利用WSH获取登录时间的jscript代码
2008/05/11 Javascript
js 变量类型转换常用函数与代码[比较全]
2009/12/01 Javascript
用jquery设置按钮的disabled属性的实现代码
2010/11/28 Javascript
jquery 与NVelocity 产生冲突的解决方法
2011/06/13 Javascript
js获取上传文件大小示例代码
2014/04/10 Javascript
微信开发 消息推送实现代码
2016/10/21 Javascript
jQuery给表格添加分页效果
2017/03/02 Javascript
详解webpack 配合babel 将es6转成es5 超简单实例
2017/05/02 Javascript
Bootstrap 树控件使用经验分享(图文解说)
2017/11/06 Javascript
CSS3结合jQuery实现动画效果及回调函数的实例
2017/12/27 jQuery
vue todo-list组件发布到npm上的方法
2018/04/04 Javascript
详解webpack loader和plugin编写
2018/10/12 Javascript
Vue源码分析之Vue实例初始化详解
2019/08/25 Javascript
详解Vscode中使用Eslint终极配置大全
2019/11/08 Javascript
js利用拖放实现添加删除
2020/08/27 Javascript
Python操作串口的方法
2015/06/17 Python
python使用pygame框架实现推箱子游戏
2018/11/20 Python
Python 实现王者荣耀中的敏感词过滤示例
2019/01/21 Python
python循环嵌套的多种使用方法解析
2019/11/29 Python
python3下pygame如何实现显示中文
2020/01/11 Python
HTML5拖放功能_动力节点Java学院整理
2017/07/13 HTML / CSS
美国知名的旅游网站:OneTravel
2018/10/09 全球购物
软件设计的目标是什么
2016/12/04 面试题
大众服装店创业计划书范文
2014/01/01 职场文书
办公室前台岗位职责
2014/01/04 职场文书
高中军训感言200字
2014/02/23 职场文书
社区植树节活动总结
2015/02/06 职场文书
2015年组织部工作总结
2015/04/03 职场文书
九年级语文教学反思
2016/03/03 职场文书
老生常谈 使用 CSS 实现三角形的技巧(多种方法)
2021/04/13 HTML / CSS