2017-10-26 7 views
1

C++でマージソートアルゴリズムを実装しようとしていますが、克服できないコンパイルエラーが続いています。ここC++のマージソートで配列を渡しているときにエラーが発生しました

コード

#include <bits/stdc++.h> 
using namespace std; 

void sort(int a[],int l,int r,int b[]){ 

    int mid=(l+r)/2; 
    int L[mid-l],R[r-mid]; 
    if((r-l)==1) 
    b[0]=a[l]; 
    else if((r-l)>1){ 

     sort(a,l,mid,L); 
     sort(a,mid,r,R); 
     merge(L,(mid-l),R,(r-mid),b); 
    } 

    return; 
} 

void merge(int a[],int n,int b[],int m,int c[]){ 

    int i=0,j=0,k=0; 
    while(k<(m+n)){ 
     if(j==m||(a[i]<=b[j]&&i<n)){ 
      c[k]=a[i]; 
      i++; 
      k++; 
     } 
     else if(i==n||(b[j]<a[i]&&j<m)){ 
      c[k]=b[j]; 
      j++; 
      k++; 
     } 
    } 

    return; 
} 

int main(){ 

    int n; 
    cin>>n; 
    int a[n],b[n]; 
    int i; 
    for(i=0;i<n;i++){ 
     cin>>a[i]; 
    } 
    sort(a,0,n,b); 
    for(i=0;i<n;i++){ 
     cout<<b[i]<<" "; 
    } 
    return 0; 
} 

私は取得続けるエラーが私は関数をマージソート関数から[]配列bを通過することができないということです。

問題を解決するのを手伝ってください。 ありがとうございます。

+0

マージを宣言する必要があります。そして、あなたは '#include 'を使う必要はありません。 –

+1

'cin >> n; int a [n] 'C++では、配列のサイズはコンパイル時定数でなければなりません。 – user2079303

+0

私は最近、JavaからC++に切り替えただけで、これを認識していませんでした。 –

答えて

1

呼び出す前にmergeを宣言する必要があります。つまり、sortの前に宣言する必要があります。たとえば -

void merge(int a[],int n,int b[],int m,int c[]); 

書き込みsort

EDITの定義の前にこの宣言私はちょうどこのライン

int a[n],b[n] 

あなたがこれを行うことができないで別のエラーを考え出しました。 C++では、配列のサイズはコンパイル時定数でなければなりません。

+0

ありがとう、しかし私のコードは、私がソート機能の前にマージ関数を宣言した後にうまく動作します。 2回目の修正はコードには何の影響もなく、警告メッセージもエラーメッセージも出ませんでした –

+0

MSVCでコードを試しましたか? –

+0

いいえ、それはdev C++と他のオンラインideの –

関連する問題