计数排序的核心在于将输入的数据值转化为键存储在额外开辟的数组空间中。作为一种线性时光复杂度的排序,计数排序请求输入的数据必须是有肯定范围的┞符数。
计数排序动图演示
计数排序JavaScript代码实现:
- function countingSort(arr, maxValue) {
- var bucket = new Array(maxValue+1),
- sortedIndex = 0;
- arrLen = arr.length,
- bucketLen = maxValue + 1;
- for (var i = 0; i < arrLen; i++) {
- if (!bucket[arr[i]]) {
- bucket[arr[i]] = 0;
- }
- bucket[arr[i]]++;
- }
- for (var j = 0; j < bucketLen; j++) {
- while(bucket[j] > 0) {
- arr[sortedIndex++] = j;
- bucket[j]--;
- }
- }
- return arr;
- }
桶排序
快速排序的名字起的是简单粗暴,因为一听到这个名字你就知道它存在的意义,就是快,并且效力高! 它是处理大年夜数据最快的排序算法之一了。固然Worst Case的时光复杂度达到了O(n²),然则人家就是优良,在大年夜多半情况下都比平均时光复杂度为O(n log n) 的排序算法表示要更好,可是这是为什么呢,我也不知道。。。好在我的强迫症又犯了,查了N多材料终于在《算法艺术与信息学比赛》上找到了知足的谜底:
为了使桶排序加倍高效,我们须要做到这两点:
- 在额外空间充分的情况下,尽量增大年夜桶的数量
- 应用的映射函数可以或许将输入的N个数据平均的分派到K个桶中
同时,对于桶中元素的排序,选择何种比较排序算法对于机能的影响至关重要。
什么时刻最快
当输入的数据可以平均的分派到每一个桶中
什么时刻最慢
当输入的数据被分派到了同一个桶中
桶排序JavaScript代码实现:
基数排序
基数排序有两种办法
- MSD 大年夜高位开端进行排序
- LSD 大年夜低位开端进行排序
基数排序 vs 计数排序 vs 桶排序
这三种排序算法都应用了桶的概念,但对桶的应用办法上有明显差别:
- 基数排序:根据键值的每位数字来分派桶
- 计数排序:每个桶只存储单一键值
- 桶排序:每个桶存储必定范围的数值
LSD基数排序动图演示:
写在最后
排序算法实袈溱是博大年夜精深,还有hin多hin多我没有总结到或者我本身还没弄明白的算法,仅仅是总结这十种排序算法都把我写哭了。。。
是以,今后如不雅我控制了更多的排序姿势,我必定还会回来的
【编辑推荐】
- 你不知道的┞俘则表达式,可以让前端HTML代码少1000行
- 这些JavaScript编程黑科技,高逼格代码,让你赞叹不已
- 这么多前端优化点你都记得住吗?
- 一文读懂JavaScript和ECMAScript的差别
- 做前端好照样Java好?看这三方面
推荐阅读
对于这种的办法:大年夜网页点击下载时要看看下载的文件名,绿色版的软件一般是目标软件的拼音或者英订婚名,多半是紧缩包(就算是安装版也要打包一下的),所以如不雅下载文件名是无序字符串,以及是exe文件,十有八九>>>详细阅读
本文标题:JavaScript中常见排序算法详解
地址:http://www.17bianji.com/lsqh/39153.html
1/2 1