每天一点算法-桶排序 (Day2)

介绍

桶排序最简单的排序算法,举例说明:有场景下有数据范围是0~n,我们假设已经有n+1个桶用于排序,将需要被排序的数据一个个放入对应的桶的序号中,即数据 3被放入第3个桶,数据67被放入第67个桶,一个桶可装多个数;最终从头到尾(升序)或者从尾到头(降序)找出桶里的数据。

例子

假设有一个待排序数组[77, 6, 37, 96, 34, 6,14], 桶排序的js实现如下(升序):

function sort(arr){
   var buckets = [], //辅助桶
       result = []; //用于保存结果

   //待排序数据依次放入桶,这里遍历n次
   arr.forEach(function(item){
       //一个桶可以装多个数,所以用数组装
       if(buckets[item]) buckets[item].push(item);
       else buckets[item] = [item]; 
   });

   //将桶里从头到尾连起来输出,这里遍历n次
   buckets.forEach(function(item){
       if(item) result = result.concat(item);
   })
   return result;
}

var arr = [77, 6, 37, 96, 34, 6, 14];
console.log(sort(arr)); // =>[6, 6, 14, 34, 37, 77, 96]

时间复杂度

大O阶计算f(n) = n + n = 2n,所以时间复杂度为O(n)。虽然时间上消耗还算ok,但桶排序有个致命的缺点:浪费空间。

感谢阅读!欢迎关注!持续更新中...

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 概述 排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部...
    蚁前阅读 10,585评论 0 52
  • 文/映雪儿 从何时起的风? 我不曾知道 大概是寒潮再次回眸时 我听见,风在嚎 花草树木也在嚎 好像忘了已是初春 突...
    映雪儿阅读 3,405评论 9 6
  • 最近突然感觉好没有意义。农村的孩儿啊!就这样。 1、 说起来咱国家的教育压力很大呀。那倒是对呵,只是天高黄帝远哟...
    三木世子阅读 1,053评论 1 3
  • 首先 我发现这个东西根本不需要团队合作啊..除了那个高级功能我完全不知道应该怎么做,虽然可能知道一点,但是因为GU...
    陈靖靖靖靖阅读 1,755评论 0 0
  • 子夜,一壶普洱红浸润了我思乡的静寂和淡淡的灯光茶魂已飞,只剩忧伤这静静的夜,何处是故乡点燃那缕清灯,我静思内心的过...
    昊水长天阅读 1,501评论 3 12