排序:計數排序
原理
計數排序要求要排序的數據必須是介於一定範圍的整數。
假設要排的數介於0~k之間,且保存在數組A中,排序結果保存在數組Z中。可以建立一個臨時數組T[k+1],將數組A中值為i的元素用T的下標i表示,而T[i]的值就是A中小於等於i的個數。然後通過T將A中的數一一映射到Z中。
舉例
假設A={0,4,2,2,3},由於A中的數據範圍介於0~4之間,故建立T[5]並初始化為0。
其中小於等於0的數隻有它本身一個,故T[0]=1;小於等於2的有3個,故T[2]=3;小於等於3的有4個,故T[3]=4;小於等於4的有5個,故T[4]=5。
接下來就是將A中的數通過T映射到Z中。我們可以從A[0]遍曆到A[4]:
1.A[0]=0,由T[0]=0知道小於等於它的隻有它本身一個,那他肯定是最小的那個,所以我們可以將它排在Z中的第一位即Z[0]中,然後T[0]自減;
2.A[1]=4,由T[4]=5知道它應該排在Z[4]的位置,然後T[4]自減;
3.A[2]=2,由T[2]=3知道它應該排在Z[2]的位置,然後T[2]自減,為什麼要自減?因為如果不自減的話下次再排2的時候又會排在Z[2]的位置上,實際上前麵已經排了一次了,所以現在小於等於它的數肯定少了一個。故要自減;
4.A[3]=2,由於前麵T[2]自減了一次,所以T[2]=2,現在的2應該排在Z[1]的位置。
5.A[4]=3,T[3]=4,故3排在Z[3]位置。
遍曆完成,Z[0]到Z[4]依次為0,2,2,3,4。完成排序。
明白原理後寫代碼就很簡單了。。
明白原理後寫代碼就很簡單了。。
最後更新:2017-04-03 20:19:52