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

C 語言選擇排序邏輯錯誤:交換位置應在外層循環

     編輯:程式設計疑難解答

錯誤代碼片段

for (i = 0; i < n-1; i++) {
    k = i;
    for (j = i+1; j < n; j++)
        if (a[j] < a[k]) k = j;
    if (k != i) swap(a[k], a[i]); // 錯誤:放在內層循環內
}

修正

if (k != i) swap(...) 必須移到外層循環、內層循環結束後:

for (i = 0; i < n-1; i++) {
    k = i;
    for (j = i+1; j < n; j++)
        if (a[j] < a[k]) k = j;
    if (k != i) swap(a[k], a[i]); // 正確位置
}

原因

選擇排序核心是「每輪在未排序區找最小值下標 k,輪末與區首交換」。放在內層會導致多次無意義交換,破壞算法邏輯。

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