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

選擇排序算法調試:邏輯錯誤修正與標準實現

     編輯:程式設計綜合問答

原代碼錯誤分析


for (i = 1; i <= 9; i++) {
    for (j = 1; j <= 10 - i; j++)
        if (a[i-1] - a[i+j-1] > max) { ... } // 索引混亂、max 初始化位置錯、交換邏輯錯
}

標準選擇排序


int a[10] = {23,10,7,9,15,88,65,50,3,40};
for (int i = 0; i < 9; i++) {
    int minIdx = i;
    for (int j = i + 1; j < 10; j++)
        if (a[j] < a[minIdx]) minIdx = j;
    if (minIdx != i) {
        int t = a[i]; a[i] = a[minIdx]; a[minIdx] = t;
    }
}
// 輸出
for (int i = 0; i < 10; i++) printf("%d ", a[i]);

修正要點

  1. 外層 i = 0..8,內層 j = i+1..9 尋找最小值索引。
  2. 用 minIdx 記錄最小值位置,而非差值 max。
  3. 僅當 minIdx != i 時交換,減少無效操作。
  4. 交換用臨時變量 t,標準三步驟。

調試技巧

  • 單步執行觀察 i, j, minIdx, a[] 變化。
  • 打印每輪交換後的數組狀態。
  • 測試已排序/逆序/重複元素數組。

**選擇排序核心:每輪選最小(或最大)放到有序區末尾,索引清晰、交換最少。**

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