// 寫法 A
temp = a[i];
a[i] = a[min];
a[min] = temp;
// 寫法 B
temp = a[min];
a[min] = a[i];
a[i] = temp;
兩者皆執行 a[i] ↔ a[min] 交換,順序不同但最終結果相同。在單執行緒、無副作用的純量交換中完全等價。
min、temp 未賦初值(雖交換前已賦值,但編譯器警告可能影響)。i < N-1 vs i < N,內層 j < N 導致越界。printf("%5d") 可能多空格。for (int i = 0; i < N - 1; i++) {
int min = i;
for (int j = i + 1; j < N; j++)
if (a[j] < a[min]) min = j;
if (min != i) {
int temp = a[i];
a[i] = a[min];
a[min] = temp;
}
}
printf 觀察陣列狀態。assert 驗證排序後有序性。交換寫法順序不影響正確性。OJ 判題失敗請優先檢查完整提交代碼、輸入輸出格式、迴圈邊界,而非糾結交換順序。