ZJ-018期算法:桶排序
Posted 程序媛日常吖
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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期】算法(九):计数排序
今日内容:
大家好哈~~~接下来的几天是排序算法,大家可以随我看我一下噢。
什么是桶排序?
桶排序是计数排序的升级版。它利用了函数的映射关系,高效与否的关键就在于这个映射函数的确定。
工作原理:假设输入数据服从均匀分布,将数据分到有限数量的桶里,每个桶再分别排序(有可能再使用别的排序算法或是以递归方式继续使用桶排序进行排)。
桶排序的算法步骤是什么?
设置一个定量的数组当作空桶;
遍历输入数据,并且把数据一个一个放到对应的桶里去;
对每个不是空的桶进行排序;
从不是空的桶里把排好序的数据拼接起来。
如何实现桶排序?
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期算法:桶排序的主要内容,如果未能解决你的问题,请参考以下文章