N爲待排序數組中最大的元素值。算法
n爲關鍵字個數數組
最壞空間複雜度:O(N*n)性能
穩定的算法。spa
public class PigeonholeSort { /** * 鴿巢排序 * @param array * @return */ public static int[] pigeonholeSort(int[] array) { int length = array.length; int maxNum = getMaxNum(array); int pigeonholeSize = maxNum +1; int [] auxiliary = new int[pigeonholeSize]; int j = 0; for(int i = 0; i < length; ++i){ auxiliary[array[i]]++; } for(int i = 0; i < pigeonholeSize; ++i){ for(int k = 0; k < auxiliary[i]; ++k){ array[j++] = i; } } return array; } // 獲得最大值 public static int getMaxNum(int[] array){ int max = array[0]; for (int i = 0; i < array.length; i++) { if(max < array[i]){ max = array[i]; } } return max; } public static void main(String[] args) { int[] A=new int[]{73,22, 93, 43, 55, 14, 28, 65, 39, 81}; A = pigeonholeSort(A); for(int num:A) { System.out.println(num); } } }