在 C 語言中,若交換函數使用傳值呼叫,例如 void swap(int x, int y),函數內部交換的只是參數的副本,對原始陣列元素並沒有影響。因此調用 swap(shu[i], shu[n]) 後,陣列內容不會改變。
正確的做法是使用傳址呼叫,在 C++ 中可以使用參考 void swap(int& x, int& y),或在 C 語言中使用指標 void swap(int* x, int* y),並在函數內部透過指標修改原始變數的值。
修改後,選擇排序中的交換操作才會正確反映到陣列中,程式才能如預期般輸出排序後的結果。