码迷,mamicode.com
首页 > 编程语言 > 详细

桶排序的java实现

时间:2015-09-07 09:29:50      阅读:185      评论:0      收藏:0      [点我收藏+]

标签:

package com.edu.hpu.sort.bucket;

import java.util.LinkedList;
import java.util.List;

import com.edu.hpu.sort.Sort;
/*    排序原理:
    顺序从待排数组中取出数字,首先6被取出,然后把6入6号桶,这个过程类似这样:空桶[ 待排数组[ 0 ] ] = 待排数组[ 0 ]
    [6 2 4 1 5 9]           待排数组
    [0 0 0 0 0 0 6 0 0 0]   空桶
    [0 1 2 3 4 5 6 7 8 9]   桶编号(实际不存在)
    顺序从待排数组中取出下一个数字,此时2被取出,将其放入2号桶,是几就放几号桶
    [6 2 4 1 5 9]           待排数组
    [0 0 2 0 0 0 6 0 0 0]   空桶
    [0 1 2 3 4 5 6 7 8 9]   桶编号(实际不存在)
    3,4,5,6省略,过程一样,全部入桶后变成下边这样
    [6 2 4 1 5 9]           待排数组
    [0 1 2 0 4 5 6 0 0 9]   空桶
    [0 1 2 3 4 5 6 7 8 9]   桶编号(实际不存在)
 */
public class BucketSort extends Sort {
    private int range = 0;
    public BucketSort(int range) {
        this.range = range;
    }
    @Override
    public int[] doSort(int[] arr) {
        @SuppressWarnings("unchecked")
        // 构造辅助数组
        List<Integer> [] aux = new LinkedList[range];
        for(int i = 0; i < aux.length; i++){
            aux[i] = new LinkedList<Integer>();
        }
        for(int i = 0; i < arr.length; i++){
            // 找打元素在桶中的位置,并将其添加
            aux[arr[i]].add(arr[i]);
        }
        for(int i = 0, j = 0; i < aux.length && j < arr.length; i++){
            for(int v : aux[i]){
                arr[j] = v;
                j++;
            }
        }
        return arr;
    }
    public static void main(String[] args) {
        Sort sort = new BucketSort(10);
        sort.printOrder(new int []{4, 1, 3, 2, 6, 9, 9});
    }
    
}

 

桶排序的java实现

标签:

原文地址:http://www.cnblogs.com/xinyuyu/p/4787956.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!