我嘗試在C 中實作選擇排序,當我封裝swap函式時,輸出顯示很多零。但是在陣列開頭的代碼仍然有效。當我用注釋中的代碼替換swap函式時,輸出是正確的。我對這個結果很困惑,誰能幫我解決它。
#include <iostream>
#include <string>
using namespace std;
template<class T>
int length(T& arr)
{
return sizeof(arr) / sizeof(arr[0]);
}
void swap(int& a, int& b)
{
a = b;
b = a - b;
a = a - b;
}
int main()
{
int array[] = { 2,2,2,2,6,56,9,4,6,7,3,2,1,55,1 };
int N = length(array);
for (int i = 0; i < N; i )
{
int min = i; // index of min
for (int j = i 1;j < N; j )
{
if (array[j] < array[min]) min = j;
}
swap(array[i],array[min]);
// int temp = array[i];
// array[i] = array[min];
// array[min] = temp;
}
for (int i = 0; i < N; i )
{
int showNum = array[i];
cout << showNum << " ";
}
return 0;
}
uj5u.com熱心網友回復:
a問題是如果和b參考相同的變數,您的交換函式將不起作用。例如,當swap(array[i], array[i])被呼叫時。
請注意,在這種情況下,這行:b = a - b;將設定b為零,因為a和b是相同的變數。
當陣列元素偶然i已經到位時,就會發生這種情況。
題外話:
學習將代碼拆分為函式。尤其是避免將大量代碼放在單個函式中main。見例子。這比你認為的更重要。
uj5u.com熱心網友回復:
您的交換功能沒有做它應該做的事情。只需使用它或修復您當前的交換。
void swap(int& a, int& b){
int temp = a;
a = b;
b = temp;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/418571.html
標籤:
