C ++将2个排序数组合并为1个排序

时间:2015-03-24 09:34:42

标签: c++ arrays sorting

所以我尝试将2个已排序的数组合并为一个,我得到了非常奇怪的数字,如输出。这是我的代码:

    #include<iostream>
    using namespace std;

   int* add(int first[],int second[], int sizeFirst, int sizeSecond)
   {
        int result[sizeFirst + sizeSecond];
        int indexFirst = 0,indexSecond = 0;
        for(int i = 0;i < sizeFirst + sizeSecond;i++)
        {
           if(indexFirst == sizeFirst || first[indexFirst] > second[indexSecond])
           {
               result[i] = second[indexSecond];
               indexSecond++;
           }
           else
           {
                result[i] = first[indexFirst];
                indexFirst++;
           }
        }
      return result;
    }
    int main()
    {
        int n;
        cin>>n;
        int arr[n];
        for(int i = 0;i < n;i ++)
            cin>>arr[i];
        int m;
        cin>>m;
        int arr2[m];
        for(int i = 0;i < m;i ++)
            cin>>arr2[i];
        int *res;
        res = add(arr,arr2,n,m);
        for(int i = 0;i < n + m;i ++)
            cout<<res[i]<<" ";
        return 0;
    }

注意:它正确排序,所以错误不存在。此外,我需要将其作为一个函数来完成,因为稍后我将需要它来处理其他一些东西。

1 个答案:

答案 0 :(得分:1)

 return result;

您正在返回一个指向本地数组的指针,该指针会在之后立即销毁 - 这是未定义的行为。您应该使用new分配它,或使用std::vector(首选)。

此外,int result[sizeFirst + sizeSecond];无效C ++,因为标准不允许变量大小的数组(但int* result = new int[sizeFirst + sizeSecond];有效)。