AB为二个己经按升序排好的表 ,C就是合并AB后的表
#include<iostream.h>
void Merge(int A[],int B[],int q,int p,int r);
void main(){
int A[]={NULL,
-1,4,5,7,9,12,18,25,32,78,101
};
int B[]={NULL,
8,13,22,24,40,45,68,100
};
int C[];
int m,n,j,r,p,q;
const int m=sizeof(A)/sizeof(int)-1;
const int n=sizeof(B)/sizeof(int)-1;
const int j=sizeof(C)/sizeof(int)-1;
Merge(A,B,m,n,j,r,p,q);
for(int r=1;r<=j;r++;)
cout<<C[r]<<" ";
cout<<endl;
}
void Merge(int A[],int B[],int p,int q,int r){
int C[],j,t;
int p=1;
int q=1;
int r=1;
int m,n;
while(p<=m&&q<=n){
if (A[p]>B[q])
{C[r]=B[q];q++;r++;}
else if(A[p]<=B[q])
{C[r]=A[p];p++;r++;}
}
if(q>n){
for(;p<=m;p++;)
{C[r]=A[p];r++;}
}
if(p<m){
for(;q<=n;q++;)
{C[r]=B[q];r++;}
}
}
c
------解决方案--------------------------------------------------------
不管你的是什么问题吧,总之是有的。
你的合并函数声明void Merge(int A[],int B[],int q,int p,int r);
你调用这个函数的时候用到的形式Merge(A,B,m,n,j,r,p,q);很明显这两个是不一致的。
还有你的r,p,q这三个变量是在主函数中定义了的没有初始化,怎么能传给函数作为参数呢?而且后面可以看出你这三个参数是在合并函数中才使用的局部变量的。
合并函数中:
void Merge(int A[],int B[],int p,int q,int r){
int C[],j,t;
int p=1;
int q=1;
int r=1; //这里最好给r初始化为0,因为你这样子的话新数组中第一个就是空的了
int m,n
还有一个,可能是你笔误吧
if(q>n) //q怎么可能大于n呢,是吧,你后面那个都是对的
{
for(;p<=m;p++;)
{C[r]=A[p];r++;}
}