首页 > 代码库 > 桶式排序

桶式排序

假设现在有一组小于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 = http://www.mamicode.com/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();      }    }  

 

桶式排序