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 innerHTML、outerHTML、innerText、outerText的区别
Nov 24 Javascript
微博@符号的用户名提示效果。(想@到谁?)
Nov 05 Javascript
在jquery boxy中添加百度地图坐标拾取注意流程
Apr 03 Javascript
JS实现上下左右对称的九九乘法表
Feb 22 Javascript
JS IOS/iPhone的Safari浏览器不兼容Javascript中的Date()问题如何解决
Nov 11 Javascript
AngularJS表格样式简单设置方法示例
Mar 03 Javascript
angular.js指令中的controller、compile与link函数的不同之处
May 10 Javascript
JS实现的汉字与Unicode码相互转化功能分析
May 25 Javascript
react 兄弟组件如何调用对方的方法示例
Oct 23 Javascript
小程序异步问题之多个网络请求依次执行并依次收集请求结果
May 05 Javascript
在 Vue 中编写 SVG 图标组件的方法
Feb 24 Javascript
vue使用better-scroll实现滑动以及左右联动
Jun 30 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
一个SQL管理员的web接口
2006/10/09 PHP
CI框架整合smarty步骤详解
2016/05/19 PHP
javascript支持firefox,ie7页面布局拖拽效果代码
2007/12/20 Javascript
Jquery Ajax学习实例3 向WebService发出请求,调用方法返回数据
2010/03/16 Javascript
AJAX使用了UpdatePanel后无法使用alert弹出脚本
2010/04/02 Javascript
UserData用法总结 lanyu出品
2010/07/01 Javascript
js 点击页面其他地方关闭弹出层(示例代码)
2013/12/24 Javascript
js校验表单后提交表单的三种方法总结
2014/02/28 Javascript
在Linux上用forever实现Node.js项目自启动
2014/07/09 Javascript
Select下拉框模糊查询功能实现代码
2016/07/22 Javascript
vue+vuecli+webpack中使用mockjs模拟后端数据的示例
2017/10/24 Javascript
vue中阻止click事件冒泡,防止触发另一个事件的方法
2018/02/08 Javascript
JS中实现隐藏部分姓名或者电话号码的代码
2018/07/17 Javascript
node.js监听文件变化的实现方法
2019/04/17 Javascript
layui数据表格实现重载数据表格功能(搜索功能)
2019/07/27 Javascript
Webpack设置环境变量的一些误区详解
2019/12/19 Javascript
解决vue-cli@3.xx安装不成功的问题及搭建ts-vue项目
2020/02/09 Javascript
JS组件库AlloyTouch实现图片轮播过程解析
2020/05/29 Javascript
微信小程序实现选择地址省市区三级联动
2020/06/21 Javascript
JQuery通过键盘控制键盘按下与松开触发事件
2020/08/07 jQuery
Python中获取网页状态码的两个方法
2014/11/03 Python
Python3.4 tkinter,PIL图片转换
2018/06/21 Python
Django重置migrations文件的方法步骤
2019/05/01 Python
基于pygame实现童年掌机打砖块游戏
2020/02/25 Python
python使用多线程+socket实现端口扫描
2020/05/28 Python
python 获取剪切板内容的两种方法
2020/11/28 Python
详解CSS的border边框属性及其在CSS3中的新特性
2016/05/10 HTML / CSS
体育教育个人自荐信范文
2013/12/01 职场文书
店长助理岗位职责
2013/12/13 职场文书
医院义诊活动总结
2014/07/04 职场文书
2014年政风行风自查自纠报告
2014/10/21 职场文书
党的群众路线教育实践活动心得体会(企业)
2014/11/03 职场文书
优化经济发展环境工作总结
2015/08/11 职场文书
2016学雷锋优秀志愿者事迹材料
2016/02/25 职场文书
python文件目录操作之os模块
2021/05/08 Python
SQL Server使用T-SQL语句批处理
2022/05/20 SQL Server