排序算法Java实现——桶排序
来源:互联网 发布:网格布定额算法 编辑:程序博客网 时间:2024/06/08 03:43
桶排序:
一、条件
桶排序不在是一种基于比较的排序方法,而是需要待排序列满足以下两个条件:
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
- 排序算法—Java实现
- 排序算法Java实现——桶排序
- 排序算法——java实现(1):冒泡排序算法
- [排序算法]--桶排序的Java实现
- Java实现排序算法——插入排序法
- 排序算法之——快速排序(Java实现)
- 排序算法之——计数排序(Java实现)
- 排序算法之——计数排序(Java实现)
- 排序算法之——快速排序(Java实现)
- Java实现排序算法——希尔排序
- Java实现排序算法——快速排序
- Java实现排序算法——堆排序
- Java实现排序算法——归并排序
- 排序算法——快速排序详解(java实现)
- 排序算法Java实现——归并排序
- 插入排序算法——Java实现
- 堆排序算法——Java实现
- 排序算法——java实现
- 为什么说图像的低频是轮廓,高频是噪声和细节
- 团体程序设计天梯赛L1-046 整除光棍
- 斗地主AI算法——第十七章の总结整理
- atexit()函数
- JDK中设计模式
- 排序算法Java实现——桶排序
- HP电脑安转虚拟机搭建ubuntu环境
- acm-2028
- Google浏览器清除缓存快捷键
- numpy学习笔记-将条件逻辑表述为数组运算
- 浅谈WEB安全之DDoS攻击
- 模拟实现strlen/strcpy/strcat/strcmp/strstr/strchr/函数
- HEVC算法和体系结构:编码结构之编码时的分层处理架构
- input为file上传文件