【发布时间】:2014-01-28 17:57:26
【问题描述】:
我想将两个排序的数组合并到第三个数组并显示升序。我在输出显示无效值的合并数组时出现错误(屏幕上重复显示“零”位)
#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];
}
【问题讨论】:
-
您是否已经尝试调试您的代码?
-
你需要一些东西,从 name1 或 name2 中取下一个,这取决于哪个更大,并复制任何剩余部分。根本不是你在做什么。