BucketSort的java实现

桶排序

思想

  • 将所要排序的序列分别映射到N个桶中
  • 然后对每个桶中的元素进行插入排序
  • 最后再将所有桶中的元素连接在一起即可
  • 注意:当我们采用桶排序的前提是:所要排序的序列要满足在某一范围内时均匀分布的,这样才能保证每个桶的元素的个数不会差异太大
package org.wrh.algorithmimplements;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;

//桶排序的实现
public class BucketSortImplement {

    public static void main(String[] args) {
        double []a={0.94,0.83,0.79,0.61,0.55,0.46,0.33,0.25,0.12,0.99,0.002,0.854,0.42345};
        System.out.println("排序前的数组元素为:"+Arrays.toString(a));
        bucketSort(a,a.length);
        System.out.println("排序后的数组元素为:"+Arrays.toString(a));

    }

    private static void bucketSort(double[] a, int length) {
        /*
         * 借助用一个List数组来作为桶
         * */
        //List<Double> list[]=new ArrayList<Double>[]();//本想弄一个List数组来解决这个问题,发现不行
        ArrayList<ArrayList<Double>> list=new ArrayList<ArrayList<Double>>() ;
        /*
         * 注意:这里首先必须得对这些元素进行初始化,才会使得下面得get函数不会有空指向异常
         * */
        for(int i=0;i<a.length;i++){
            list.add(new ArrayList<Double>());
        }
        /*
         * 再将所有的元素放在对应的桶中 
         * */

        for(int i=0;i<length;i++){
            list.get((int)(a[i]*length)).add(a[i]);

        }
        /*
         * 将每个桶的元素排序
         * */
        for(int i=0;i<length;i++){
            Collections.sort(list.get(i));

        }
        /*
         * 最后将桶的所有元素合并
         * */
        int index=0;
        for(List<Double> arrayList:list){
            for(Double d:arrayList){
                a[index++]=d;
            }

        }
    }

}

上面代码中的注释写的比较详细,这里就不在解释了

总结

  • 桶排序的时间复杂度为:O(n)
  • 但是桶排序所要的额外空间为:O(n)
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值