常用排序算法之桶式排序

        桶式排序,也叫计数排序,就是为每个元素创建一个编号为该元素值的桶,将相同元素的个数写入该桶中,然后根据buckets[i]=buckets[i]+buckets[i-1]计算该元素在排序后数组中的位置,最后将原数组元素根据计算出的数组位置放入原数组。

         形象展示形象展示

        步骤:

  1. 复制arr[n]到temp[n];
  2. 创建桶式数组buckets[max-min],并全部初始化为0;
  3. 遍历arr[n],出现元素i,就将buckets[i]的值加1;
  4. 利用buckets[i]=buckets[i]+buckets[i-1]计算元素在排序后数组中的位置;
  5. 结合temp[n]和第4步的结果,将元素放入原数组。
       特点:

  1. 待排序的元素需在可枚举范围内;
  2. 内存开销较大;
  3. 快速简单的排序方法。
     代码实现:

public class BucketSort {


/**
* <p>MethodName:main </p>
* <p>Description: 常用排序算法之桶式排序</p>
* <p>@param args</p> 
* <p>Return:void </p> 
* @author Sunny
* @date 2016-9-27下午3:13:15 
*/
public static void main(String[] args) {
int[] arr={7,6,4,9,1,5,2,8,3,1};
   bucketSort(arr,0,10);
   ArrayUtils.printArray(arr);
}

public static void bucketSort(int[] arr,int min,int max){
//缓存数组
int[] temp=new int[arr.length];
for(int i=0;i<arr.length;i++){
temp[i]=arr[i];
}
//构建max-min个桶,每个桶初始化为0
int[] buckets=new int[max-min];
for(int i=0;i<buckets.length;i++){
buckets[i]=0;
}
//桶中记录 每个元素出现的次数 
for(int i=0;i<arr.length;i++){
buckets[arr[i]]++;
}
ArrayUtils.printArray(buckets);
//计算元素在排序后数组中的位置 
for(int i=1;i<buckets.length;i++){ 
buckets[i]=buckets[i]+buckets[i-1];
}
ArrayUtils.printArray(buckets);
//将各元素按计算出的位置存入原数组
for(int i=0;i<arr.length;i++){
arr[--buckets[temp[i]-min]]=temp[i];
}
}


}

     结果展示:

0 2 1 1 1 1 1 1 1 1 
0 2 3 4 5 6 7 8 9 10 
1 1 2 3 4 5 6 7 8 9 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值