2017-10-28 20 views
1

私は配列の引数をsource.cppから取って別のヘッダーファイルに選択ソート関数を持っています これは、配列をソートする必要がありますが、私はスワップ機能を使用してdoens'tを使用します。一方ソートアルゴリズムのスワップ機能は、ソート機能のパラメータでは機能しません。

class selection 
{ 
public: 
    void selectionSort(int a[],int b[], int n); 
    void swap(int a, int b); 
}; 
void selection::selectionSort(int a[], int b[], int n) 
{ 
    for (int i = 0; i < n - 1; i++) 
    { 
     int iMin = i; 
     for (int j = i + 1; j < n; j++) 
     { 
      if (a[j] < a[iMin]) 
       iMin = j; 
     } 
     swap(a[i], a[iMin]); 
     swap(b[i], b[iMin]); 
    } 
    for (int i = 0; i < n; i++) 
    { 
     cout << a[i] << ' '; 
     cout << b[i] << endl; 
    } 
    cout << endl; 
} 
void selection::swap(int a, int b) 
{ 
    int temp; 
    temp = a; 
    a = b; 
    b = temp; 
} 

、iは関数を使用してはいけないし、単に(このコードのスワップを置き換える)、このようなループ内スワップを書き込む

int temp = a[i]; 
a[i] = a[iMin]; 
a[iMin] = temp; 

int temp2 = b[i] 
b[i] = b[iMin]; 
b[iMin] = temp2; 

それが完璧に動作します。

追加情報は、[]とb []として渡される2つの配列メンバーを持つsource.cppの構造体を持っていることです.nはソートされるデータの数だけです。

+0

あなたの 'swap'関数は何もしません。あなたの問題は次のように減らすことができます: 'void f(int x){x = 42; } int main(){int a = 0; f(a); cout << a << "\ n"; } ' – melpomene

+1

参照を使用するためにスワップを変更する:void swap(int&a、int &b); – rcgldr

答えて

2
代わりに値を、参考文献に取るようにあなたのスワップ機能を変更

void selection::swap(int& a, int& b) 
{ 
    int temp; 
    temp = a; 
    a = b; 
    b = temp; 
} 

関数が値にとると、オブジェクトが渡さ前にコピーされ、呼び出し先には影響を受けません。

0

プログラムでは、selection::swap()は値で引数をとります。受信パラメータの値をスワップすることによって値を変更することになっているので、参照を取るべきです:

void selection::swap(int &a, int &b) 
関連する問題