泡沫排序靠「比較」排序。接下來這招完全不同——從頭到尾不比較任何兩個數,照樣把資料排好。
¶原理:數出現次數,再依序倒出來
如果要排序的數字範圍不大——比如全是 0 \sim 100 的分數——可以這樣做:
- 開一個計數陣列
cnt,大小蓋過整個值域。
- 讀入每個數 x 就執行
cnt[x]++——「x 又出現一次」。
- 由小到大掃過整個值域:數值 v 出現幾次,就輸出幾個 v。
輸出天生就是由小到大——因為我們是按順序掃過值域的。這就是計數排序法(Counting Sort)。你其實見過它的前半段:上冊 6.7 的計數陣列統計分數,當時統計完就收工;計數排序只是多做第 3 步,把統計結果依序倒出來。
登入後即可閱讀完整內容
語法書免費開放給所有 AACPOJ 帳號,註冊只要一分鐘。