不使用迴圈、陣列、排序演算法,僅靠兩兩比較交換的原始方式,完成 7 個浮點數的降冪排序。這是理解「比較交換」本質的極佳練習。
利用暫存變數 t 進行交換,依序比較:
a 與 b~g 比較,確保 a 為最小值b 與 c~g 比較,確保 b 為次小值f 與 g 比較共需 C(7,2) = 21 次比較交換,最終 a ≤ b ≤ c ≤ d ≤ e ≤ f ≤ g。
#include <stdio.h>
void main() {
float a, b, c, d, e, f, g, t;
scanf("%f,%f,%f,%f,%f,%f,%f", &a, &b, &c, &d, &e, &f, &g);
if (a > b) { t = a; a = b; b = t; }
if (a > c) { t = a; a = c; c = t; }
if (a > d) { t = a; a = d; d = t; }
if (a > e) { t = a; a = e; e = t; }
if (a > f) { t = a; a = f; f = t; }
if (a > g) { t = a; a = g; g = t; }
if (b > c) { t = b; b = c; c = t; }
if (b > d) { t = b; b = d; d = t; }
if (b > e) { t = b; b = e; e = t; }
if (b > f) { t = b; b = f; f = t; }
if (b > g) { t = b; b = g; g = t; }
if (c > d) { t = c; c = d; d = t; }
if (c > e) { t = c; c = e; e = t; }
if (c > f) { t = c; c = f; f = t; }
if (c > g) { t = c; c = g; g = t; }
if (d > e) { t = d; d = e; e = t; }
if (d > f) { t = d; d = f; f = t; }
if (d > g) { t = d; d = g; g = t; }
if (e > f) { t = e; e = f; f = t; }
if (e > g) { t = e; e = g; g = t; }
if (f > g) { t = f; f = g; g = t; }
printf("%-5.2f,%5.2f,%5.2f,%5.2f,%5.2f,%5.2f,%5.2f\n", a, b, c, d, e, f, g);
}
輸入: 7,3,9,1,5,2,8 輸出: 1.00, 2.00, 3.00, 5.00, 7.00, 8.00, 9.00
| 優點 | 缺點 |
|---|---|
| 直觀展示比較交換本質 | 程式碼冗長(O(n²) 行) |
| 無需理解迴圈、陣列、函數 | 擴充性極差(n=100 時不可維護) |
| 適合絕對初學者建立邏輯信心 | 非實務開發模式 |
此程式雖非生產級代碼,但能幫助初學者跨越「從邏輯到語法」的認知鴻溝。