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,輪末與區首交換」。放在內層會導致多次無意義交換,破壞算法邏輯。