您的位置:首页 > 编程语言 > Java开发

【常用排序算法】桶排序(Java实现)

2018-01-03 14:32 776 查看
第一次代码记录:

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]--;
}
}
}


如果您有更好的解法,欢迎您在留言区补充,感谢!!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: