語法書 / AA 競程語法書 下冊 / 第十一單元 / 排序:把資料排好的力量

11.1 排序:把資料排好的力量

正式給定義:排序就是把序列裡的元素,按照指定的順序重新排成一列。「指定的順序」最常見的是數字由小到大(遞增)或由大到小(遞減);字串則常按 8.9 的字典序。

排序本身不是目的——資料排好之後,處理與查詢會變得方便,這才是重點。具體來說:

想做的事 亂序時 排好(遞增)之後
找最大值、最小值 全部掃一遍 最後一格、第一格,直接拿
找第 k 很麻煩 倒數第 k 格,直接拿
找出相同的元素 兩兩互相比對 相同的數全擠在一起,看相鄰就好
查某個值有沒有出現 全部掃一遍 像查字典,翻幾下就能確定
「差距最小的一對」這類兩兩比較 每一對都要比 只要比相鄰的(11.9 詳談)

一句話總結:排序花一次工夫,換之後每個問題都變便宜。所以競程的常見節奏是——讀入資料,先排序,再開始想事情。

動手試試看:想三個生活中「排好序才好用」的例子。書架上的漫畫、手機通訊錄、統一發票對獎……對獎的時候,你手上那疊發票是照什麼排的?為什麼這樣排對起來比較快?