代碼片段:
for(i=0;i<4;i++) {
for(j=0;j<4-i;j++) // 錯誤:當 i=0, j=3 時,a[j+1] 即 a[4] 越界
if(a[j]>a[j+1]) { k=a[j]; a[j]=a[j+1]; a[j+1]=k; }
}
冒泡排序每輪將最大值「冒泡」到末尾,第 `i` 輪只需比較前 `n-1-i` 對相鄰元素:
for (i = 0; i < 4 - 1; i++) { // 外層只需 n-1 輪
for (j = 0; j < 4 - 1 - i; j++) { // 內層 j 最大 n-2-i,j+1 最大 n-1-i
if (a[j] > a[j+1]) { swap... }
}
}
for(i=0;i<5-1;i++) {
for(j=0;j<5-1-i;j++) { ... }
}
修正邊界後,兩次排序均正常,不再出現莫名的 0。