21xrx.com
2024-11-22 07:05:25 Friday
登录
文章检索 我的文章 写文章
C++ 实现有序数组合并
2023-07-05 03:07:10 深夜i     --     --
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 方法中,我们需要保证待合并的数组已经按升序排列。

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

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复