11.1 排序:把資料排好的力量
正式給定義:排序就是把序列裡的元素,按照指定的順序重新排成一列。「指定的順序」最常見的是數字由小到大(遞增)或由大到小(遞減);字串則常按 8.9 的字典序。
排序本身不是目的——資料排好之後,處理與查詢會變得方便,這才是重點。具體來說:
| 想做的事 | 亂序時 | 排好(遞增)之後 |
|---|---|---|
| 找最大值、最小值 | 全部掃一遍 | 最後一格、第一格,直接拿 |
| 找第 k 大 | 很麻煩 | 倒數第 k 格,直接拿 |
| 找出相同的元素 | 兩兩互相比對 | 相同的數全擠在一起,看相鄰就好 |
| 查某個值有沒有出現 | 全部掃一遍 | 像查字典,翻幾下就能確定 |
| 「差距最小的一對」這類兩兩比較 | 每一對都要比 | 只要比相鄰的(11.9 詳談) |
一句話總結:排序花一次工夫,換之後每個問題都變便宜。所以競程的常見節奏是——讀入資料,先排序,再開始想事情。
動手試試看:想三個生活中「排好序才好用」的例子。書架上的漫畫、手機通訊錄、統一發票對獎……對獎的時候,你手上那疊發票是照什麼排的?為什麼這樣排對起來比較快?