21xrx.com
2025-04-28 03:53:07 Monday
文章检索 我的文章 写文章
C++ 实现有序数组合并
2023-07-05 03:07:10 深夜i     24     0
C++ 有序数组 合并

有序数组合并是一种常见的编程问题,它是将两个已经按升序排列的数组合并成一个新的有序数组。这个问题看似简单,但在实际应用中常常用到,例如在数据库查询结果的合并中。在 C++ 中,我们可以使用多种方法来实现有序数组合并。

一种常见的方法是使用双指针。我们创建一个新的数组,然后使用两个指针分别指向两个待合并的数组的头部。比较两个指针指向的值,将较小的值放入新数组,同时移动指针。重复这个过程直到两个数组中有一个为空,然后将另一个数组的剩余部分复制到新数组的末尾。以下就是这种方法的实现代码:

void merge(int arr1[], int size1, int arr2[], int size2, int mergedArr[]) {
  int i = 0, j = 0, k = 0;
  while (i < size1 && j < size2) {
    if (arr1[i] < arr2[j])
      mergedArr[k++] = arr1[i++];
    else
      mergedArr[k++] = arr2[j++];
  }
  while (i < size1)
    mergedArr[k++] = arr1[i++];
  while (j < size2)
    mergedArr[k++] = arr2[j++];
}

另一种方法是使用 stl 的 merge 函数,它也可以有效地解决有序数组合并问题。以下是这种方法的实现代码:

#include <algorithm>
void merge(int arr1[], int size1, int arr2[], int size2, int mergedArr[]) {
  std::merge(arr1, arr1 + size1, arr2, arr2 + size2, mergedArr);
}

不管使用哪种方法,我们都需要注意一些细节问题。例如在双指针方法中,我们需要先创建一个足够大的数组来存储合并后的结果。在 stl 的 merge 方法中,我们需要保证待合并的数组已经按升序排列。

总之,有序数组合并是一种常见的编程问题,我们可以使用多种方法来解决它。在实际应用中,我们应考虑实现的效率和代码的可读性,选择合适的方法解决问题。

  
  

评论区