C ++合并数组输出错误

时间:2014-01-28 17:57:27

标签: c++ arrays merge

我想将两个排序的数组合并到第三个数组并显示升序。我在输出中出现错误,合并显示无效值的数组(屏幕上重复显示“零”数字)

#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];

    }

1 个答案:

答案 0 :(得分:0)

您的Merge函数正在获取name3的副本,添加您的值,然后在完成后丢弃该副本。因此,您的数组已合并,但您永远不会从函数中返回合并的数组。

您可能希望Merge转而指向name3

void Merge(int name[], int name2[], int *name3, int temp, int temp2, int &temp3);

这将允许您的函数处理数组本身,而不是副本。请参阅第二个示例here以供参考。

注意:您可能还必须传入name3的大小,以避免越界错误。