桶排序是一种排序方式,实现方式有计数排序和基数排序两种,泡泡排序、选择排序、插入排序、合并排序、快速排序和堆叠排序都是基于比较的排序,而桶排序是基于数据的排序
1 .桶排序思想
)1)获得无序排列的取值范围
)2)基于取值范围)创建(对应数量的)桶)
)3)遍历数组,将各元素放入对应的“桶”中
)4)按顺序遍历铲斗内的各要素,依次配置到数组中,从而完成数组的分类。
桶是可以在各种数据结构(如数组、队列或堆栈)中实现的容器。
2 .复杂性
时间复杂度:遍历数组求最大值的最小值为o[n],遍历数组放入“存储桶”的复杂度为o[n],遍历存储桶获取各值的复杂度为o[n],最终的时间复杂度为O(3n ),两个
空间的复杂性:额外的空间取决于要素的取值范围,总的来说是o(n )
稳定性:“水桶”以什么样的数据结构实现决定了水桶排序是否稳定。 对于队列,可以保证相同元素在“取出”后的相对位置与“放入”前相同。 这意味着排序会很稳定,但在堆栈中实现“桶”时,排序一定会不稳定。 桶排序是稳定的排序算法,因为桶排序是稳定的
3 .桶排序实现的计数排序
(1)计数排序图标的流程
找到无序数组的最大值,创建最大值为1的空数组
遍历原始数组,计算每个元素的出现次数
遍历“存储桶”,即用于统计元素数量的数组,以获得有序数组
)2)计数排序Java代码的实现
publicstaticvoidbucketsort (int [ ] arr ) {
if (arr==空||arr.length2) {
返回;
}
int max=Integer.MIN_VALUE;
for(intI=0; i arr.length; I ) {
max=math.max(max,arr[i] );
}
int[] bucket=new int[max 1];
for(intI=0; i arr.length; I ) {
bucket[arr[i]];
}
int i=0;
for(intj=0; j bucket.length; j ) {
wile(bucket[j]--0) {
arr[i ]=j;
}
}
}
4 .桶排序实现的基数排序(等待更新) ) ) ) ) ) ) ) ) )。
(1)基数排序图标的流程
)2)基数排序Java代码的实现