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

C 語言冒泡排序邏輯錯誤修正:循環條件與交換變量

     編輯:程式設計綜合問答

原始錯誤代碼

for(i=0;i for(j=1;j if(shuzu[j-1]>shuzu[j]) {
    int a=shuzu[j-1];
    shuzu[j-1]=shuzu[j];
    shuzu[j]=shuzu[j-1]; // 錯誤:此時 shuzu[j-1] 已被覆蓋
}

主要問題

  1. 外層循環條件缺失: for(i=0;i 未給出終止條件。
  2. 內層循環邏輯反常: 冒泡排序內層通常 j < n-i,而非 j<=i。
  3. 交換邏輯錯誤: 需臨時變量保存 shuzu[j-1],再賦值 shuzu[j],最後恢復到 shuzu[j-1]。原代碼連續賦值導致數據丟失。
  4. 打印語句分號為中文全角: ; 導致編譯錯誤。

修正代碼 (標準冒泡排序)

#include <stdio.h>

int main() {
    int shuzu[5] = {1, 4, 2, 8, 7};
    int i, j, temp;
    for (i = 0; i < 5; i++) {
        for (j = 1; j < 5 - i; j++) { // 每輪將最大值冒泡到末尾
            if (shuzu[j-1] > shuzu[j]) {
                temp = shuzu[j-1];
                shuzu[j-1] = shuzu[j];
                shuzu[j] = temp;
            }
        }
    }
    for (i = 0; i < 5; i++) {
        printf("%d\n", shuzu[i]);
    }
    return 0;
}

輸出結果

1
2
4
7
8

總結

  • 冒泡排序核心:相鄰比較、大後移、輪數遞減。
  • 交換必須用臨時變量,順序:存 A → A=B → B=存值。
  • 循環邊界仔細驗證,避免越界或少排。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved