下一步

這是你在本書第一次正式與「演算法」交手:同一個排序問題,泡沫排序、計數排序、合併排序給出三種代價完全不同的解法——「怎麼做」與「多快」從此是兩個都要問的問題。而在實戰面,你的工具箱多了整套排序火力:sort 一行排天下、比較函式客製規則、「排序後相鄰」的解題嗅覺。

往下走之前,先做一件輕鬆但回報很高的事。到目前為止你寫的都是「老實寫法」:迴圈逐格跑、型態一個字一個字打完。下一單元「競程慣用語法把賽場上真正在用的省力寫法一次補齊——auto 讓編譯器推型態、range-based for 一行掃完整個 vector、using 幫又臭又長的型態取短別名,還有讓 cincout 跑快起來的兩行開場白。它不引入任何新的演算法,卻能讓你讀懂別人的程式碼:從此高手的提交不再是天書。

再往後的第十三單元「結構體」才會補上本單元留下的最後一個缺口——目前能排的東西都還是「單一欄位」:數字、字元,頂多用 pair 綁兩個值,可是真實題目裡的一筆資料常常更胖(一個選手有名字、身高、體重、排名……pair 塞不下了)。那個單元教你自己打造資料型態,把好幾個欄位包成一包,宣告、讀入、排序一條龍;到時候你會發現,11.6 的比較函式將以 operator< 的樣貌再次登場,而且寫起來更順手。(另外,本單元一路在算的 O(n^2)O(n \log n) 帳,第十七單元「效能優化」有一整個單元的實戰——等不及的話,讀完本單元就可以直接跳過去。)