在C ++中的合并排序中传递数组时出错

悉达思·卡普尔(Siddharth Kapoor)

我正在尝试在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 []从排序函数传递到合并函数。

请帮助我解决问题。提前致谢。

纳西夫·乔杜里

您需要merge在调用之前进行声明这意味着,您需要在之前声明它sort例如 -

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

在定义之前写此声明 sort

编辑我刚刚发现这一行中的另一个错误

int a[n],b[n]

你不可以做这个。在C ++中,数组的大小必须是编译时间常数。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章