在 C++ 中的合并排序中传递数组时出错
Error while passing array in merge sort in 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[] 从排序函数传递到合并函数。
请帮我解决问题。
提前致谢。
调用前需要声明merge
。也就是说,你需要在sort
之前声明它。例如 -
void merge(int a[],int n,int b[],int m,int c[]);
在sort
的定义之前写这个声明
EDIT 我刚刚发现这一行中的另一个错误
int a[n],b[n]
你不能这样做。在 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[] 从排序函数传递到合并函数。
请帮我解决问题。 提前致谢。
调用前需要声明merge
。也就是说,你需要在sort
之前声明它。例如 -
void merge(int a[],int n,int b[],int m,int c[]);
在sort
EDIT 我刚刚发现这一行中的另一个错误
int a[n],b[n]
你不能这样做。在 C++ 中,数组的大小必须是编译时常量。