桶式排序

桶式排序

《疯狂JAVA16课》看到桶式排序一直没弄懂,那就用程序来跑一下…

    public static void main(String[] args) {
        System.out.println("Hello World!");

        int[] data = new int[] { 5, 4, 2, 4, 1};
        print(data);
        bucketSort(data, 0, 6);
        print(data);
    }
    public static void bucketSort(int[] data, int min, int max) {
        // 缓存数组
        int[] tmp = new int[data.length];
        // buckets用于记录待排序元素的信息
        // buckets数组定义了max-min个桶
        int[] buckets = new int[max - min];
        // 计算每个元素在序列出现的次数
        for (int i = 0; i < data.length; i++) {
            buckets[data[i] - min]++;
        }
        //old_buckets=0,1,1,0,2,1
        // 计算“落入”各桶内的元素在有序序列中的位置
        for (int i = 1; i < max - min; i++) {
            buckets[i] = buckets[i] + buckets[i - 1];
            //i=1 = 1 + 0
            //i=2 = 1 + 1
            //i=3 = 2 + 0
            //i=4 = 2 + 2
            //i=5 = 4 + 1
        }
        //new_buckets=0,1,2,2,4,5
        // 将data中的元素完全复制到tmp数组中
        System.arraycopy(data, 0, tmp, 0, data.length);
        //tmp=5,4,2,4,1
        // 根据buckets数组中的信息将待排序列的各元素放入相应位置
        for (int k = data.length - 1; k >= 0; k--) {
            //k = 4; tmp[4] = 1; buckets[1] = 1;0data[0] = 1;
            //k = 3; tmp[3] = 4; buckets[4] = 4;3data[3] = 4;
            //k = 2; tmp[2] = 2; buckets[2] = 2;1data[1] = 2;
            //k = 1; tmp[1] = 4; buckets[4] = 3;2data[2] = 4;
            //k = 0; tmp[0] = 5; buckets[5] = 5;4data[4] = 5;
            data[--buckets[tmp[k] - min]] = tmp[k];
            //k = 3;buckets[4] = 4;--buckets[4];此时buckets[4] = 3
            //k = 1;buckets[4] = 3;注意坑
        }
    }

参考代码:
http://blog.csdn.net/apei830/article/details/6596057

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值