js算法:计数算法 counting sort
2016-06-30 10:17
302 查看
// 计数排序 count sort
/** * 使用count sort基本原理 * * 已知要排序的数字在一个区间中(如 0..k),这样我们就可以计算出来 A[0...n]中的某一项A[i]有多少个数小于它,进而得知它应该 * 放到排好序数组的第多少个位置 A[2,3,5,4,8,7,6,9,1,0] 如A[7] = 9 因为比9小的数字有9个, * 所以我们知道9应该放到排好序的数组B[0..9]的第9个位置 */ 'use strict'; /** * arr是原数组, sortedArr排好序数组, k待排序数字的最大范围 */ function countSort(arr, sortedArr, k) { let tmpArr = []; //初始化tmpArr值全为0,长度为k+1,因为有0 for(var i=0; i<=k; i++) { tmpArr[i] = 0; } //计算待排序的数组arr,每一项的数字出现的次数 for(var j=0, jj=arr.length; j<jj; j++) { tmpArr[arr[j]] = tmpArr[arr[j]] + 1; } //统计有多少小于等于arr[i]的数字 for(var i=1; i<=k; i++) { tmpArr[i] = tmpArr[i] + tmpArr[i-1]; } //对arr进行排序 if (!sortedArr) { sortedArr = []; } for(var j=0, jj=arr.length; j<jj; j++) { var idx = arr[j]; sortedArr[tmpArr[idx]-1] = idx; //此处切记要递减,因为有可能arr中有数字重复的,如果数字重复第二次出现的数字, //我们放到计算出来的位置的前一个,如果第三次出现,则前二个,以此增加 tmpArr[idx] = tmpArr[idx] - 1; } } let arr = [1,5,4,8,7,9,6,5,4,3,2,0]; console.info("原数组:", arr); let sortedArr = []; countSort(arr, sortedArr, 9); console.info("排序后:", sortedArr); //运行输出结果:node count-sort.js //原数组: [ 1, 5, 4, 8, 7, 9, 6, 5, 4, 3, 2, 0 ] //排序后: [ 0, 1, 2, 3, 4, 4, 5, 5, 6, 7, 8, 9 ]
相关文章推荐
- 在命令行用 sort 进行排序
- Linux Shell - 如何使用sort与uniq命令删除重复的文本行
- Redis sort 排序命令详解
- 批处理命令教学之字符串排序(sort)
- mysql Sort aborted: Out of sort memory, consider increasing server sort buffer size的解决方法
- C++计数排序详解
- C++ 关于STL中sort()对struct排序的方法
- C#中Arraylist的sort函数用法实例分析
- Js中sort()方法的用法
- js采用concat和sort将N个数组拼接起来的方法
- 如何写JS数组sort的比较函数
- javascript中sort()的用法实例分析
- js LZ77算法的实现代码
- 详解Matlab中 sort 函数用法
- js模拟实现Array的sort方法
- Java数据结构及算法实例:冒泡排序 Bubble Sort
- js表数据排序 sort table data
- javascript 数组排序函数sort和reverse使用介绍
- JavaScript Table排序 2.0 (更新)
- js中数组(Array)的排序(sort)注意事项说明