当前位置: 首页 > 编程笔记 >

C++实现两个有序数组的合并

松俊才
2023-03-14
本文向大家介绍C++实现两个有序数组的合并,包括了C++实现两个有序数组的合并的使用技巧和注意事项,需要的朋友参考一下

本文实例为大家分享了C++实现两个有序数组合并的具体代码,供大家参考,具体内容如下

剑指offer面试题5延展题:

问题:有两个排序的数组A1和A2,内存在A1的末尾有足够多的空间容纳A2。请实现一个函数,把A2中所有数字插入A1中,并且所有的数字是排序(默认升序)的。

思路:在合并两个数组(包括字符串)时,从前往后复制每个数字(或字符)则需要重复移动数字(或字符)多次,则考虑从后往前复制就可以减少移动的次数,从而提高效率。

1.n1,n2分别指向数组A1和A2的尾部,strNew指向合并后的数组的尾部;
2.当数组名是一个nullptr指针,或者A1数组是一个空数组则返回;
3.当数组A1[ida]>=A2[idb]或者idb<0时,则复制ida指针所指的数到strNew指向的位置,ida向前移动1格,strNew向前移动1格;
4.当数组A1[ida]<A2[idb]或者ida<0时,则复制idb指针所指的数到strNew指向的位置,idb向前移动1格,strNew向前移动1格;
5.直到strNew<0则停止循环。

注意:

输入的n1,n2为数组的长度,作指针时都要-1;
循环终止的条件从合并数组指针入手,合并结束循环终止,即strNew<0;
注意形参和实参的传递,数组传入函数的三种声明func(int *arr), func(int arr[n]), func(int arr[]),返回数组指针的函数int * func( )

#include<iostream>
#include<stdio.h>
using namespace std;
 
int * insert(int *str1, int *str2, int n1, int n2,int length){
  //int *dest = str1;
  if(str1 == nullptr || str2 == nullptr || length <= 0){
    return 0;
  }
  int strNew = n1 + n2 - 1;
  int ida = n1-1;
  int idb = n2-1;
  while(strNew >= 0){
    if(str1[ida] >= str2[idb] || idb<0){
      str1[strNew--] = str1[ida];
      ida--;
    }
    else if(str1[ida] < str2[idb] || ida<0){
      str1[strNew--] = str2[idb];
      idb--;
    }
  }
  return str1;
  //return dest;
}

int main() 
{
  int n1,n2;
  cin>>n1>>n2;
 int a[n1],b[n2];
  for(int i = 0; i<n1; ++i){
    cin>>a[i];
  }
  for(int i=0;i<n2;++i){
    cin>>b[i];
  }
  //int *c;
  //c = insert(a, b, n1, n2, 100);
  insert(a, b, n1, n2, 100);
  for(int i=0;i<n1+n2;++i){
    cout<<a[i]<<' ';
  }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持小牛知识库。

 类似资料:
  • 给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组。 说明: 初始化 nums1 和 nums2 的元素数量分别为 m 和 n。 你可以假设 nums1 有足够的空间(空间大小大于或等于 m + n)来保存 nums2 中的元素。 示例: 输入: nums1 = [1,2,3,0,0,0], m = 3 nums2 = [2,

  • 本文向大家介绍手写代码:合并两个有序数组相关面试题,主要包含被问及手写代码:合并两个有序数组时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 解法一: int num[m+n];//新建一个数组,对nums1和nums2排序,排完序赋值给nums1 解法二:   解法三:直接在nums1里进行操作,从nums1的尾部开始,取nums1和nums2中的最大值放入其中。如果n先到达0就能直接得到

  • 问题内容: 给定两个排序数组,如下所示: 我希望输出为: 要么: 我知道我可以执行以下操作: 我只是想知道是否有一种更快的方法,因为我要处理的数组具有数百万个元素。 任何想法都欢迎。谢谢 问题答案: 由于您使用numpy,因此我怀疑bisec根本不会对您有所帮助。因此,我建议您做两件事: 千万 不能 使用,使用方法,而不是这种种取代阵列,避免了复制。 必须使用没有到位的。因此,不要手动使用逻辑。I

  • 问题内容: 我有两个像这样的数组: 我想结合这两个数组,使其不包含重复项,并保留其原始键。例如,输出应为: 我已经尝试过了,但是它正在更改其原始键: 有什么办法吗? 问题答案: 只需使用: 那应该解决。因为如果一个键出现多次(例如在您的示例中),则使用字符串键,因此一个键将覆盖具有相同名称的处理键。因为在您的情况下,它们两者都具有相同的值,但这无关紧要,并且还会删除重复项。 更新:我刚刚意识到,P

  • 问题是== 将nums1和nums2合并到一个按非递减顺序排序的数组中。 最终排序的数组不应由函数返回,而应存储在数组 nums1 中。为了适应这种情况,nums1 的长度为 m n,其中前 m 个元素表示应合并的元素,最后 n 个元素设置为 0 并应忽略。nums2 的长度为 n。 我的代码中有什么错误??? 您的意见 我的产出 预期产出

  • 本文向大家介绍python实现合并两个排序的链表,包括了python实现合并两个排序的链表的使用技巧和注意事项,需要的朋友参考一下 剑指offer:合并两个排序的链表,Python实现 题目描述 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。 吐槽 本来想用递归实现,但是大脑卡壳,没有想到合适的递归策略,潜意识里还是把两个链表当成两个数组来看待,写出了