我想将两个排序的数组合并到第三个数组并显示升序。我在输出中出现错误,合并显示无效值的数组(屏幕上重复显示“零”数字)
#include<iostream.h>
#include<conio.h>
void Merge(int name[], int name2[], int name3[], int temp, int temp2, int &temp3);
void main()
{
int i,j,size,name[100],name2[100],name3[200],temp,temp2,temp3;
cout<<"\nHow many numbers Ascending order:";
cin>>size;
cout<<"\nEnter Elements: \n";
for(i=0;i<size;i++)
{
cin>>name[i];
}
for(i=0;i<size;i++)
{
for(j=0;j<size-i-1;j++)
{
if(name[j]>name[j+1]) //just replace > by < for descending order.
{
temp=name[j];
name[j]=name[j+1];
name[j+1]=temp;
}
}
}
cout<<"\nAscending order is:";
for(i=0;i<size;i++)
{
cout<<" "<<name[i];
}
cout<<"\n\nHow many numbers for Descending Order:";
cin>>size;
cout<<"\nEnter Descending Elements: \n";
for(i=0;i<size;i++)
{
cin>>name2[i];
}
for(i=0;i<size;i++)
{
for(j=0;j<size-i-1;j++)
{
if(name2[j]<name2[j+1]) //just replace > by < for descending order.
{
temp2=name2[j];
name2[j]=name2[j+1];
name2[j+1]=temp2;
}
}
}
cout<<"\nDescending order is:";
for(i=0;i<size;i++)
{
cout<<" "<<name2[i];
}
Merge(name,name2,name3,temp,temp2,temp3);
cout<<"\n\nThe Merged Array in Ascending Order"<<endl;
for(i=0;i<temp3;i++)
{
cout<<name3[i]<<" ";
}
getch();
}
void Merge(int name[], int name2[], int name3[], int temp, int temp2, int &temp3)
{
int i=0, j=temp2-1;
temp3=0;
while (i<temp && j>=0)
{
if (name[i]<name2[j])
name3[temp3++]=name[i++];
else if (name[i]>name2[j])
name3[temp3++]=name2[j--];
else
{
name3[temp3++]=name[i++];
j--;
}
}
for (int t=i;t<temp;t++)
name3[temp3++]=name[t];
for (t=j;t>=0;t--)
name3[temp3++]=name2[t];
}
答案 0 :(得分:0)
您的Merge
函数正在获取name3的副本,添加您的值,然后在完成后丢弃该副本。因此,您的数组已合并,但您永远不会从函数中返回合并的数组。
您可能希望Merge
转而指向name3
。
void Merge(int name[], int name2[], int *name3, int temp, int temp2, int &temp3);
这将允许您的函数处理数组本身,而不是副本。请参阅第二个示例here以供参考。
注意:您可能还必须传入name3
的大小,以避免越界错误。