經典排序演算法 - 鴿巢排序Pigeonhole sort
原理類似桶排序,同樣需要一個很大的鴿巢[桶排序裡管這個叫桶,名字無所謂了]
鴿巢其實就是數組啦,數組的索引位置就表示值,該索引位置的值表示出現次數,如果全部為1次或0次那就是桶排序
例如
var pigeonHole = new int[100];
pigeonHole[0]的值表示0的出現次數...
pigeonHole[1]的值表示1的出現次數...
pigeonHole[2]的值表示2的出現次數...
參考http://hi.baidu.com/wangxvfeng101/blog/item/a2c22560e57260c58cb10d8c.html
代碼僅供參考,歡迎諶誤
/// 鴿巢排序 /// </summary> /// <param name="unsorted">待排數組</param> /// <param name="maxNumber">待排數組中的最大數,如果可以指定的話</param> /// <returns></returns> static int[] pogeon_sort(int[] unsorted, int maxNumber = 10) { int[] pogeonHole = new int[maxNumber + 1]; foreach (var item in unsorted) { pogeonHole[item]++; } return pogeonHole; /* * pogeonHole[10] = 4; 的含意是 * 在待排數組中有4個10出現,同理其它 */ } static void Main(string[] args) { int[] x = { 99, 65, 24, 47, 47, 50, 99, 88, 66, 33, 66, 67, 31, 18, 24 }; var sorted = pogeon_sort(x, 99); for (int i = 0; i < sorted.Length; i++) { for (int j = 0; j < sorted[i]; j++) { Console.WriteLine(i); } } Console.ReadLine(); }