【常用排序算法】桶排序(Java实现)
2018-01-03 14:32
776 查看
第一次代码记录:
存在的问题:
1.数组中存在负数时会抛出异常
2.range取值范围不确定性
第二次代码记录:
第三次代码记录(2018年1月20日):
如果您有更好的解法,欢迎您在留言区补充,感谢!!
public class BucketSort { public static void main(String[] args) { int[] array = new int[]{3,1,5,9,6,5,0}; sort(10,array); for (int i = 0; i < array.length; i++) { System.out.println(array[i]); } } public static void sort(int range,int[] array){ int[] temp=new int[range]; for (int i = 0; i < array.length; i++) { temp[array[i]]++; } int index=0; for (int i = 0; i < temp.length; i++) { if(temp[i]>0) for (int j = 0; j < temp[i]; j++) { array[index++]=i; } } } }
存在的问题:
1.数组中存在负数时会抛出异常
2.range取值范围不确定性
第二次代码记录:
public class BucketSort { public static void main(String[] args) { int[] array = new int[]{3,-7,-2,1,5,9,6,5,0}; sort(array); for (int i = 0; i < array.length; i++) { System.out.println(array[i]); } } public static void sort(int[] array){ /** * 找出参数数组中的最大值与最小值 * 以此来求出range值 */ int max=array[0]; int min=array[0]; for(int i:array){ if(i>max) max=i; if(i<min) min=i; } int range=max-min+1; int[] temp=new int[range]; for (int i = 0; i < array.length; i++) { /** * 所有值都减去min,以此来保证temp数组索引为非负数 c041 * 后面为array数组赋值时,需要再加上min,以保证正确性 */ temp[array[i]-min]++; } int index=0; for (int i = 0; i < temp.length; i++) { if(temp[i]>0) for (int j = 0; j < temp[i]; j++) { array[index++]=i+min; } } } }
第三次代码记录(2018年1月20日):
public void bucketSort(int[] A){ // 参数校验 int length=A.length; if(length==0) return; // 循环数组,找出最大值与最小值 // 以此来求出range值 int max=A[0]; int min=A[0]; for(int i=1;i<length;i++){ if(A[i]>max) max=A[i]; if(A[i]<min) min=A[i]; } int range=max-min+1; // 创建新数组(也可以说成是桶) int[] array=new int[range]; for(int i=0;i<length;i++){ // 减去min,以此来保证array数组索引为非负数 array[A[i]-min]++; } int index=0; for(int i=0;i<range;i++){ while(array[i]>0){ // 补上之前减去min的值 A[index++]=i+min; // 与第二次代码记录相比较,节省了一次循环 array[i]--; } } }
如果您有更好的解法,欢迎您在留言区补充,感谢!!
相关文章推荐
- 常用的各种排序算法的JAVA实现
- JAVA实现的常用排序算法及对比
- 用Java实现几种常用排序算法(先实现一个org.rut.util.algorithm.SortUtil)
- Java 常用排序算法实现--快速排序、插入排序、选择、冒泡
- Java实现的几个常用排序算法详细解读
- 常用的各种排序算法的JAVA实现
- 两种常用排序算法的java实现
- Java实现的几个常用排序算法详细解读
- 常用排序算法小结(附Java实现)
- java实现的几个常用排序算法
- 几种常用的排序算法的分析及java实现(希尔排序,堆排序,归并排序,快速排序,选择排序,插入排序,冒泡排序)
- 常用的各种排序算法的JAVA实现
- Java实现的几个常用排序算法详细解读
- Java实现的几个常用排序算法详细解读
- 常用排序算法分析与实现(Java版)
- Java实现的几个常用排序算法详细解读
- 常用的各种排序算法的JAVA实现
- Java实现的几个常用排序算法详细解读
- 用Java实现几种常用的排序算法
- 用Java实现几种常用排序算法(先实现一个org.rut.util.algorithm.SortUtil)