i<99 vs i<max 的本質區別// 寫法 A:硬編碼 100 筆資料
for (i = 0; i < 99; i++)
for (j = i + 1; j < 100; j++)
// 寫法 B:使用變數 max
for (i = 0; i < max; i++)
for (j = i + 1; j < max; j++)
| 維度 | 寫法 A | 寫法 B |
|---|---|---|
| 適用資料量 | 固定 100 筆 | 任意 max 筆(需先賦值) |
| 維護性 | 修改資料量要改多處常數 | 只需改 max 值 |
| 通用性 | 死板 | 可作為函數參數、讀取自檔案/輸入 |
| 邊界條件 | 外層 i < 99 確保 j 最大 99 | 外層 i < max,內層 j < max,邏輯一致 |
#define N 100。max 已正確賦值(如 scanf("%d", &max))。// 錯誤:max 未初始化
int max;
for (i = 0; i < max; i++) ... // 未定義行為
// 正確
int max = 100; // 或 scanf 讀取
for (i = 0; i < max; i++) ...
for (i = 0; i < n - 1; i++) { // 至多 n-1 趟
int swapped = 0;
for (j = 0; j < n - 1 - i; j++) { // 內層每趟少比一個已定位的最大值
if (a[j] > a[j+1]) { swap; swapped = 1; }
}
if (!swapped) break; // 提前結束
}
掌握邊界條件與變數化參數,是寫出正確、可維護排序代碼的關鍵。