桶式排序

假设现在有一组小于M的正整数 a1、 a2 ,…… ,an ,例如(1-M)对它们排序可以采用以下的思路:使用一个大小为M的数组buckets, 初始化全部为0。当扫描到ai的时候,buckets[ai] 加1。在所有的输入被读进去之后,扫描数组,打印好排序的表

(桶式排序的条件:

待排序列所有的值处于一个可枚举的范围之类;

待排序列所在的这个可枚举的范围不应该太大,否则排序开销太大。

 例子:对公司的员工年龄进行排序(1-99)

package com.sort;

public class BucketSort {  
    public static int count = 0;  
  
    public static void main(String[] args) {  
  
        int[] data = new int[] { 5, 3, 6, 2, 1, 9, 4, 8, 7 };  
        print(data);  
        bucketSort(data, data.length, 9);  
        print(data);  
  
    }  
// 待排序的data,数组大小,最大的元素
    public static void bucketSort(int arrayForSort[], int arraySize, int maxItem)  {  
        // 缓存数组  
         int i,j; 
         int k=0;
             int Count[ ]=new int[10]; //下标是针对数据的最大值9所以数组的大小应该+1 
           
            // 置空  
            for (  i = 0; i <= maxItem; ++i)  
            {  
                Count[i] = 0;  
            }  
            // 遍历待排序数组  
            for (  i = 0; i < arraySize; ++i)  
            {  
                ++Count[arrayForSort[i]];
            }  
          
            // 桶排序输出  
            // 也可以存储在数组中,然后返回数组  
            for (  i = 0; i <= maxItem; ++i)  
            {  
                for (  j = 1; j <= Count[i]; ++j)  
                {   
                      System.out.print(  i+"\t");  
                      
//                      把date的数据变换,
                      arrayForSort[k]=i;
                      k++;
                }  
            }  
            System.out.print("\n");  
          
    }  
  
    public static void print(int[] data) {  
        for (int i = 0; i < data.length; i++) {  
            System.out.print(data[i] + "\t");  
        }  
        System.out.println();  
    }  
  
}  

 

posted @ 2014-10-19 10:06  磊love  阅读(309)  评论(0编辑  收藏  举报