【问题标题】:How to merge two sorted arrays to form another sorted array in c++?如何在 C++ 中合并两个排序数组以形成另一个排序数组?
【发布时间】:2015-12-06 09:54:17
【问题描述】:

这段代码是我写的。

#include<iostream>
using namespace std;
int main()
{int n1,n2;
cin>>n1>>n2;
int arr1[n1],arr2[n2];
for (int i=0;i<n1;i++)
cin>>arr1[i];
for (int j=0;j<n2;j++)
cin>>arr2[j];
int arr3[n1+n2],c1=0,c2=0,c3=0;
while (c1<n2 & c2<n2)
{if (arr1[c1]<=arr2[c2])
{arr3[c3]=arr1[c1];
c1++;
c3++;
}
else { arr3[c3]=arr2[c2];
c2++;
c3++;
}
while (c1<n1)
{arr3[c3]=arr1[c1];
c1++;
c3++;
}
while (c2<n2)
{arr3[c3]=arr2[c2];
c2++;
c3++;
}

}
for (int g=0;g<n1+n2;g++)
cout<<arr3[g];
return 0;
}

但它没有提供所需的输出。 当我在 Java 中看到相同的代码时,它被赋予了相同的算法。 这段代码有什么问题?

【问题讨论】:

  • 什么输出?而你期望的输出是什么?
  • 哦,很抱歉,我想在输入 {2,4,5} 和 {1,3} 时得到 {1,2,3,4,5} 但我得到了 {1, 2,3,4} 加上一些垃圾值,没有 5。实际上我得到了打字错误。我写的是 (c1

标签: c++ arrays merge


【解决方案1】:

合并两个已排序的向量相对简单。这是一个伪代码示例,它将按升序获取两个向量并按升序合并到另一个向量中。

Input: Sorted arrays A, B
Output: Merged array C

while((iterator on A is valid)&&(iterator on B is valid)):
    if (elem in A < elem in B):
        insert elem in A into C
        increment iterator on A
    else:
        insert elem in B into C
        increment iterator on B

while (iterator on A is valid):
    insert element in A into C
    increment iterator on A
while (iterator on B is valid):
    insert element in B into C
    increment iterator on B
return C

第一个循环遍历 A 和 B 的元素,将最小的元素复制到 C 中,直到其中至少一个被用完。一旦我们知道我们已经处理了至少一个列表中的所有元素,我们只想将另一个列表的剩余元素复制到 C 中。这就是底部两个循环所做的事情。

编辑:

稍微查看您的代码后,您的代码的一些特定问题可能来自第一个循环。您使用的是按位与而不是逻辑与。

arr3 的声明也是错误的。 C++ 只允许使用编译时常量初始化数组大小。 See This post 更深入地描述该问题。

【讨论】:

  • 我输入错误....我错误地输入了(A 条件上的迭代器)和(B 条件上的迭代器)。实际上它编译了所以我无法理解。反正我明白了。感谢您的帮助和您的时间。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-08-22
  • 2021-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-04
相关资源
最近更新 更多