2016-04-19 9 views
0

私は以下のコードを持っています。メソッドはうまくいくはずですが、ベクターを関数に渡すのに問題があります。私は周りを検索し、ベクトルは '参照'または '値'として渡すことができると私は両方を試みたが、彼らは動作するように見えませんでした。メソッドを間違って呼び出すか、ベクトルを間違った方法で渡していますか?いずれにしても、これを解決するにはどうすればよいですか?ありがとう! :)ここでInsertionSortメソッドを呼び出すにはどうすればよいですか?

//insertion sort method 

#include <iostream> 
#include <vector> 
using namespace std; 

void insertionSort(int arr[], int n){ 
for(int i = 0; i < n; i++){ 

int temp = arr[i]; // element adjacent to left sorted array 
int j = i - 1; 

while(temp > arr[j] && j != 0){ 
    arr[j] = arr[j - 1]; 
    j--; 
} 
arr[j] = temp; 
} 
} 

int main(){ 
int n, temp; 
cin >> n; 
vector <int> arr; 

for(int i = 0; i < n; i++){ 
cin >> temp; 
arr.push_back(temp); 
} 

insertionSort(arr, n); 

for(int i = 0; i < n; i++) 
cout << arr[i] << " "; 

return 0; 
} 
+0

あなたの関数定義ヘッダーを* void insertSort(vector &arr、int n)*に変更すると、整数の配列と整数のベクトルは異なるデータ型であり、整数の配列を必要とする関数にベクトルを渡すことはできません。 –

答えて

1

insertSort(int arr []、int n)メソッドの最初のパラメータが間違っています。 また、arrが正しく処理されませんでした。最初の反復で、int j = 0 - 1 = -1;予期せぬ/納得できません。

これを試してください:

void insertionSort(vector <int> &arr, int n){ 

    int i, j, temp; 
    for (i = 1; i < n; i++) 
    { 
     temp = arr[i]; 
     j = i - 1; 
     while ((j >= 0) && (temp<arr[j])) 
     { 
      arr[j + 1] = arr[j]; 
      j = j - 1; 
     } 
     arr[j + 1] = temp; 
    } 
} 

感謝!

+0

ありがとうMonirul :) –

関連する問題