ZJ-018期算法:桶排序

Posted 程序媛日常吖

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ZJ-018期算法:桶排序相关的知识,希望对你有一定的参考价值。

前言:                                                     

在拿下字节跳动之前 若出现断更的情况,欢迎每一位关注的小伙伴 进群抢红包仅限断更当日【ZJ-018期】算法(十):桶排序。加入断更红包群请关注公众号并回复:断更红包。⬇️⬇️

【ZJ-018期】算法(十):桶排序

往期回顾:                                                

【ZJ-001期】数据结构(一):数组【ZJ-002期】数据结构(二):队列【ZJ-003期】数据结构(三):栈【ZJ-004期】数据结构(四):单链表【ZJ-005期】数据结构(五):双链表【ZJ-006期】数据结构(六):二叉树【ZJ-007期】数据结构(七):二叉搜索树【ZJ-008期】数据结构(八):二叉搜索树删除【ZJ-009期】算法(一):贪心算法【ZJ-010期】算法(二):冒泡排序【ZJ-011期】算法(三):选择排序【ZJ-012期】算法(四):插入排序【ZJ-013期】算法(五):希尔排序【ZJ-014期】算法(六):归并排序【ZJ-015期】算法(七):快速排序【ZJ-016期】算法(八):堆排序【ZJ-017期】算法(九):计数排序


今日内容:                                                

大家好哈~~~接下来的几天是排序算法,大家可以随我看我一下噢。


【ZJ-018期】算法(十):桶排序什么是桶排序?

桶排序是计数排序的升级版。它利用了函数的映射关系,高效与否的关键就在于这个映射函数的确定。

工作原理:假设输入数据服从均匀分布,将数据分到有限数量的桶里,每个桶再分别排序(有可能再使用别的排序算法或是以递归方式继续使用桶排序进行排)。


【ZJ-018期】算法(十):桶排序桶排序的算法步骤是什么?

  1. 设置一个定量的数组当作空桶;

  2. 遍历输入数据,并且把数据一个一个放到对应的桶里去;

  3. 对每个不是空的桶进行排序;

  4. 从不是空的桶里把排好序的数据拼接起来。 


【ZJ-018期】算法(十):桶排序如何实现桶排序?

public class Solution { public static void main(String[] args) { int[] buckets = new int[]{1,3,5,2,4,6,8}; bucketSort(buckets, 10); }  private void bucketSort(int[] a, int max) {    int[] buckets;         if (a==null || max<1) return ; // 创建一个容量为max的数组buckets,并且将buckets中的所有数据都初始化为0。 buckets = new int[max];         // 1. 计数         for(int i = 0; i < a.length; i++)              buckets[a[i]]++;           // 2. 排序         for (int i = 0, j = 0; i < max; i++) {             while( (buckets[i]--) >0 ) {                 a[j++] = i;             }         }     } }


排序的稳定性如何?

桶排序是稳定的排序算法。


桶排序复杂度如何?

当输入的元素是 n 个 0到 k 之间的整数时,时间复杂度是O(n),空间复杂度也是O(n+k)。


好了,今天就到这里,感谢各位看官到这里~



以上是关于ZJ-018期算法:桶排序的主要内容,如果未能解决你的问题,请参考以下文章

视频桶排序

算法之排序算法——桶排序

排序算法——桶排序

桶排序算法

桶排序算法

十大经典排序算法总结(桶排序)