合并两个有序数组

问题描述:

给你两个有序数数组,nums1和nums2,请你将nums2合并到nums1中,使nums1成为一个有序数组.

说明:

初始化nums1和nums2的元素数量分别为m和n.可以假设nums1中有足够的空间来存放nums2中的元素.

方法1:从前往后找

#include <stdio.h>
#include <stdlib.h>//从前向后
void merge(int* nums1, int size1, int m, int* nums2, int size2, int n){int* newA = (int*)malloc(sizeof(int)*(m + n));int idx = 0;int n1 = 0;int n2 = 0;//合并while (n1 < m && n2 < n){if (nums1[n1] <= nums2[n2]){newA[idx++] = nums1[n1++];}else{newA[idx++] = nums2[n2++];}}//可能还有没访问完的元素if (n1 < m){memcpy(newA + idx,nums1 + n1,sizeof (int)*(m-n1));}if (n2 < n){memcpy(newA + idx, nums2 + n2, sizeof (int)*(n - n2));}memcpy(nums1,newA,sizeof(int)*(m+n));free(newA);
}
int main(){int nums1[] = { 1, 2, 3 };int size1 = sizeof(nums1) / sizeof(nums1[0]);int nums2[] = { 2, 5, 6 };int size2 = sizeof(nums2) / sizeof(nums2[0]);merge(nums1, size1, 3, nums2, size2, 3);for (int i = 0; i < 6;i++){printf("%d",nums1[i]);}system("pause");return 0;
}

运行结果:

方法2:从后向前进行找数组中的数字

#include <stdio.h>
#include <stdlib.h>void merge(int* nums1, int size1, int m, int* nums2, int size2, int n){//从后向前int idx = m + n - 1;while (m > 0 && n > 0){if (nums1[m - 1] >= nums2[n - 1]){nums1[idx--] = nums1[m - 1];--m;}else{nums1[idx--] = nums2[n - 1];--n;}}if (n > 0){memcpy(nums1, nums2, sizeof(int)*n);}
}int main(){int m = 3;int n = 3;int nums1[] = { 1, 2, 3};int size1 = sizeof(nums1) / sizeof(nums1[0]);int nums2[] = { 2, 5, 6 };int size2 = sizeof(nums2) / sizeof(nums2[0]);merge(nums1, size1, m, nums2, size2, n);for (int i = 0; i < 6;i++){printf(" %d ", nums1[i]);}system("pause");return 0;
}

运行结果:

方法3.先将两个数组依次拷贝到另一个数组中,然后再讲得到的数组进行冒泡排序

#include <stdio.h>
#include <stdlib.h>int main(){int i = 0;int j= 0;int arr1[4] = { 1, 3, 4, 6 };int arr2[4] = { 2, 5, 7, 9 };int c[8];for (i = 0; i < 4;i++){c[i] = arr1[i];}for (j = 0,i = 4; j < 4; j++,i++){c[i] = arr2[j];}一共走的趟数int size = 8;for (i = 0; i < size; i++){for (j = size -1-i; j >= 0; j--){if (c[j - 1] > c[j]){int tmp = c[j - 1];c[j - 1] = c[j];c[j] = tmp;}}}for (i = 0; i < 8; i++){printf(" %d",c[i]);}system("pause");return 0;
}

运行结果:

LeetCode3:合并两个有序数组 给你两个有序数数组,nums1和nums2,请你将nums2合并到nums1中,使nums1成为一个有序数组.相关推荐

  1. java如何把文件中的内容存到一个动态数组arraylist中_如何动态地向Java中的数组添加项目?...

    由于数组的大小是固定的,因此您不能动态地向其中添加元素.但是,如果您仍然想要这样做,将数组转换为ArrayList对象. 将所需元素添加到数组列表. 将数组列表转换为数组. 示例import java ...

  2. 有序序列插入c语言,已有一个排好序的序列,输入一个数插入到该序列中,使其仍然保持有序....

    满意答案 逸奠WOnQvf 2013.09.10 采纳率:47%    等级:12 已帮助:8717人 #include #define N 9 void main() { int i,j; int ...

  3. php 动态多维数组长度,怎么在php中利用count获取多维数组的长度

    怎么在php中利用count获取多维数组的长度 发布时间:2021-01-05 16:38:55 来源:亿速云 阅读:80 作者:Leah 今天就跟大家聊聊有关怎么在php中利用count获取多维数组 ...

  4. matlab在数组中插入,一次快速插入一个Matlab数组元素

    我正试图加速我的代码中的主要瓶颈 . 它是将数组元素插入数组的中间 . 这些元素必须一次插入一个,因为我事先并不知道 . 我无法收集它们并立即将它们全部插入,因为稍后出现的元素(以及它们的插入位置)以 ...

  5. c语言的结构体指针的引用,C语言中的指针、引用、数组、结构体

    指针.引用和取值 什么是指针?什么是内存地址?什么叫做指针的取值?指针是一个存储计算机内存地址的变量.在这份教程里"引用"表示计算机内存地址.从指针指向的内存读取数据称作指针的取值 ...

  6. 给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组。

    1.给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组. 说明: 初始化 nums1 和 nums2 的元素数量分别为 m 和 ...

  7. 两个或多个有序数组合并为一个有序数组

    要求: 不使用for循环 不使用API方法进行数据迁移 : System.arraycopy(int[] a,-); Arrays.copyOf(int[] a,-); 一.两个有序数组合并为一个有序 ...

  8. 合并两个有序数组(给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组。)

    void merge(int* nums1, int nums1Size, int m, int* nums2, int nums2Size, int n){          //定义,让数组从后往 ...

  9. [PHP] 算法-合并两个有序链表为一个有序链表的PHP实现

    合并两个有序的链表为一个有序的链表: 类似归并排序中合并两个数组的部分 1.遍历链表1和链表2,比较链表1和2中的元素大小 2.如果链表1结点大于链表2的结点,该结点放入第三方链表 3.链表1往下走一 ...

最新文章

  1. linux下pptpd的安装配置(×××)
  2. 快学习使用Linux吧,避免勒索病毒大肆入侵
  3. 响应式网站建设优势有哪些?
  4. ng-repeat 的重复问题
  5. 笔谈OpenGL ES(一)
  6. mysql怎么备份和恢复_如何优雅的备份和恢复Mysql数据库?
  7. 根据当前docker容器生成镜像提交到远端服务器
  8. 如何解决anaconda出现CondaHTTPError问题
  9. 华硕P4P800-X 主板南桥芯片又烧坏了......
  10. 分享一张牛逼的程序员职业路线图给你们!
  11. Listary——好用到哭的高效快速搜索工具
  12. POI读取PPT图表模板,动态改变图表数据,操作图表
  13. java连连看开题报告_JAVA连连看
  14. fluent udf dpm 捕集效率
  15. EDK2编译报错,请帮我看看这个是什么错误
  16. NCHW vs. NHWC
  17. 飞鸟如何去爱,才能爱上水里的鱼?
  18. 智力题及答案(包含梅氏砝码问题)
  19. python删除最后一个元素_Numpy-从一维数组中删除最后一个元素的最佳方法?
  20. 数字计算机在线用,十进制与二进制在线转换工具

热门文章

  1. 开关电源学习笔记7 --- DC-DC变换器的储能电感设计之磁芯及气隙
  2. WIN10开机无限自动修复失败重启问题解决
  3. 下载Echarts.min.js和Echart-gl.min.js
  4. 03 关键测量指标——整体网络测量
  5. 【无标题】.NET?MemoryCache如何清除全部缓存学习通http://www.bdgxy.com/
  6. android中一些特殊字符(如:←↑→↓等箭头符号)的Unicode码值
  7. 货郎担问题java算法_经典算法(1)---货郎担问题
  8. 华为HMS对谷歌GMS,有多大胜算?
  9. 手机上照片大小怎么改?如何用手机修改图片尺寸?
  10. 使用Hibernate,一对多和多对一的实现(双向).