js排序算法详解-基数排序
来源:互联网 发布:销售票据打印软件 编辑:程序博客网 时间:2024/06/03 07:23
全栈工程师开发手册 (作者:栾鹏)
js系列教程5-数据结构和算法全解
js排序算法详解-基数排序
其实基数排序和桶排序挺类似的,都是找一个容器把属于同一类的元素装起来,然后进行排序。可以把基数排序类比成已知该序列的最高位,然后以除去相对来说的最低位(可能是个位,可能是十位)剩余的位数为桶数,这样一来步长就是10或者100了。但是基数排序相对桶排序又有多了一个亮点,那就是基数排序是先排最低位(个位),把最低位一致的放在一个桶里,然后依次取出,再进一位(十位),把十位相同的再放到一个桶里,然后再取出,这样经过两次重排序就能得到百位以内的排序序列了,百位,千位也是如此。
/*** 基数排序适用于:* (1)数据范围较小,建议在小于1000* (2)每个数值都要大于等于0* @author damonare* @param arr 待排序数组* @param maxDigit 最大位数*///LSD Radix Sortfunction radixSort(arr, maxDigit) { var mod = 10; var dev = 1; var counter = []; console.time('基数排序耗时'); for (var i = 0; i < maxDigit; i++, dev *= 10, mod *= 10) { for(var j = 0; j < arr.length; j++) { var bucket = parseInt((arr[j] % mod) / dev); if(counter[bucket]== null) { counter[bucket] = []; } counter[bucket].push(arr[j]); } var pos = 0; for(var j = 0; j < counter.length; j++) { var value = null; if(counter[j]!=null) { while ((value = counter[j].shift()) != null) { arr[pos++] = value; } } } } console.timeEnd('基数排序耗时'); return arr;}var arr = [3, 44, 38, 5, 47, 15, 36, 26, 27, 2, 46, 4, 19, 50, 48];console.log(radixSort(arr,2)); //[2, 3, 4, 5, 15, 19, 26, 27, 36, 38, 44, 46, 47, 48, 50];
但是基数排序也有个弊端,就是必须知道最高位有多少位。
附动图:
基数排序 vs 计数排序 vs 桶排序
这三种排序算法都利用了桶的概念,但对桶的使用方法上有明显差异:
1.基数排序:根据键值的每位数字来分配桶
2.计数排序:每个桶只存储单一键值
3.桶排序:每个桶存储一定范围的数值
阅读全文
0 0
- js排序算法详解-基数排序
- 基数排序算法(排序详解)
- 八大排序算法详解——基数排序
- 排序算法-基数排序_基数排序
- 经典排序算法(10)——基数排序算法详解
- 排序算法之基数排序
- 排序算法 - 基数排序(C++)
- 【排序算法】基数排序(RadixSort)
- 排序算法-基数排序
- 排序算法之基数排序
- 排序算法-----基数排序
- 排序算法-基数排序
- 排序算法之基数排序
- 排序算法---基数排序
- 排序算法--基数排序
- 排序算法之基数排序
- 排序算法九:基数排序
- 排序算法之基数排序
- Spring(24)——自定义BeanDefinitionRegistryPostProcessor
- Java MathApi
- UCOSII软件定时器
- 广播通知操作
- readonly和disabled
- js排序算法详解-基数排序
- Android App的设计架构:MVC,MVP,MVVM与架构经验谈
- IOS开发之Views自定义布局
- 关于thinkphp里面公用模板的调用
- 【java基础】两个变量互换不使用第三方变量的方法
- 字符串的slice(),substr(),substring()
- [poj1155] TELE 树形DP 01背包
- 并发编程复习(六):使用wait和notify模拟阻塞队列
- 3379: [Usaco2004 Open]Turning in Homework 交作业