首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C >> C 語言問答

C 語言排序迴圈邊界詳解:i<99 vs i<max 的本質區別

     編輯:C 語言問答

兩種寫法的語義對比

// 寫法 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,邏輯一致

考試/實務該用哪個?

  • 題目明確給定「100 筆資料」且無擴充需求 → 寫法 A 可接受,但建議定義 #define N 100。
  • 題目說「n 筆資料」或「最多 100 筆,實際數量由輸入決定」 → 必須用寫法 B,並確保 max 已正確賦值(如 scanf("%d", &max))。
  • 面試/專案代碼 → 永遠用寫法 B,體現「不要硬編碼」的工程素養。

常見錯誤提醒

// 錯誤: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; // 提前結束
}

掌握邊界條件與變數化參數,是寫出正確、可維護排序代碼的關鍵。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved