排序算法Java实现——桶排序

桶排序:

一、条件

桶排序不在是一种基于比较的排序方法,而是需要待排序列满足以下两个条件:

1)待排序列的值处于一个可枚举的范围内

2)待排序列所在可枚举范围不应太大,不然开销会很大。

 

二、场景

 

桶排序(Bucket Sort)的原理很简单,它是将数组分到有限数量的桶子里。

假设待排序的数组a中共有N个整数,并且已知数组a中数据的范围[0, MAX)。在桶排序时,创建容量为MAX的桶数组r,并将桶数组元素都初始化为0;将容量为MAX的桶数组中的每一个单元都看作一个"桶"。
在排序时,逐个遍历数组a,将数组a的值,作为"桶数组r"的下标。当a中数据被读取时,就将桶的值加1。例如,读取到数组a[3]=5,则将r[5]的值+1。

 

三、代码

 

 

/*@(#)bucketSort.java   2017-4-27 
 * Copy Right 2017 Bank of Communications Co.Ltd.
 * All Copyright Reserved
 */

package com.sort.cn;

/**
 * TODO Document bucketSort
 * <p>
 * @version 1.0.0,2017-4-27
 * @author Singit
 * @since 1.0.0
 */
public class bucketSort {
	public static void main(String[] args) {
		int[] x = { 98, 65, 25, 44, 50, 20 ,110, 50};
	    int[] sorted = bucketSort(x, 9999);
	    for (int i = 0; i < sorted.length; i++)
	    {
	        if (sorted[i] > 0)
	            System.out.print(sorted[i]+" ");
	    }
	}
	public static int[] bucketSort(int[] nums, int maxNum){
	    int[] sorted = new int[maxNum+1];

	    for(int i=0; i<nums.length; i++){
	        sorted[nums[i]] = nums[i];//把数据放到对应索引的位置
	    }
	    return sorted;
	}
}


输出结果:

 

 

20 25 44 50 65 98 110 

 

总结: 

 

桶排序的平均时间复杂度为线性的O(N+C),其中C=N*(logN-logM)。

 

如果相对于同样的N,桶数量M越大,其效率越高,最好的时间复杂度达到O(N)。 

当然桶排序的空间复杂度 为O(N+M),如果输入数据非常庞大,而桶的数量也非常多,则空间代价无疑是昂贵的。此外,桶排序是稳定的。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值