初學程式設計時,經典的「輸入三個數字,由小到大輸出」練習常讓新手困惑:當數字有相等值時,比較邏輯為何仍能正確運作?本文將透過圖解方式,深入剖析這個看似簡單卻蘊含核心排序邏輯的演算法。
程式碼採用三輪兩兩比較交換的策略:
許多初學者誤以為交換會導致數值遺失。實際上:
a > b 交換後,原 a 的值移至 b,原 b 的值移至 a以輸入 3, 3, 2 為例:
| 步驟 | 比較條件 | a | b | c | 說明 |
|---|---|---|---|---|---|
| 初始 | - | 3 | 3 | 2 | 輸入值 |
| 第一輪 | a > b? (3>3=假) | 3 | 3 | 2 | 不交換,保持原序 |
| 第二輪 | a > c? (3>2=真) | 2 | 3 | 3 | 交換 a、c,最小值 2 移至 a |
| 第三輪 | b > c? (3>3=假) | 2 | 3 | 3 | 不交換,b、c 相等保持原序 |
| 結果 | - | 2 | 3 | 3 | 正確輸出:2, 3, 3 |
此演算法在相等值時「不交換」,具有穩定排序特性:相等元素的相對順序不變。這正是為何輸出結果正確的關鍵——程式並非「不執行」,而是「條件不成立而跳過交換」,恰好符合排序需求。
Array.sort() 或標準排序演算法三數排序看似簡單,實則包含「變數值流動」、「條件判斷短路」、「穩定排序」等核心概念。相等值不會導致邏輯失效,反而驗證了演算法的健全性。掌握這個基礎,對後續學習複雜排序演算法大有裨益。