带你刷 · C语言 | 有序序列合并

简介: 问:输入两个升序排列的序列,将两个序列合并为一个有序序列并输出。数据范围:`1≤n`,`m≤1000` ,序列中的值满足`0≤val≤30000`

在这里插入图片描述
啊我摔倒了..有没有人扶我起来学习....

题目

问:
输入两个升序排列的序列,将两个序列合并为一个有序序列并输出。

数据范围:1≤nm≤1000 ,序列中的值满足0≤val≤30000

输入描述:
输入包含三行

第一行包含两个正整数n, m,用空格分隔。n表示第二行第一个升序序列中数字的个数,m表示第三行第二个升序序列中数字的个数

第二行包含n个整数,用空格分隔

第三行包含m个整数,用空格分隔

输出描述:
输出为一行,输出长度为n+m的升序序列,即长度为n的升序序列和长度为m的升序序列中的元素重新进行升序序列排列合并

示例
输入
5 6
1 3 7 9 22
2 8 10 17 33 44

输出
1 2 3 7 8 9 10 17 22 33 44


解法

1. 确定思路

  • 当然,有一个简单的思路,就是另外定义一个数组,把这两个序列的元素全部存进去,然后再进行排序
  • 但是一旦涉及到排序,时间复杂的就会上去
  • 这边提供一个思路,就是用空间换时间
  • 先定义两个数组分别存储这两个序列,然后用两个指针分别遍历这两个数组,指针走一步比较一次各自指向的值的大小
  • 谁指向的值小,就先把那个值打印出来,然后该指针+1,另外一个指针先不动,一次次进行比较

2. 编写代码

  • 根据上述思路,直接用数字下标代替指针,对比索引值的大小,小的先打印,打印完下标+1

在这里插入图片描述

对应代码:
        if(a[x]<b[y])
        {
            printf("%d ",a[x]);
            x++;
        }
        else
        {
            printf("%d ",b[y]);
            y++;
        }
  • 一次一次对比...当其中一个下标遍历完数组后退出循环

在这里插入图片描述

对应代码:
    while(x<n && y<m)
    {
        if(a[x]<b[y])
        {
            printf("%d ",a[x]);
            x++;
        }
        else
        {
            printf("%d ",b[y]);
            y++;
        }
    }
  • 另外一个下标还得继续遍历打印数组,直接打完即可
对应代码:
    if(x==n)
    {
        for(;y<m;y++)
            printf("%d ",b[y]);
    }
    else
    {
        for(;x<n;x++)
            printf("%d ",a[x]);
    }
  • 试试看最终的功能:

在这里插入图片描述


在这里插入图片描述

相关文章
|
C语言
【C语言刷题】调整奇数偶数顺序、有序序列合并以及有序序列判断
【C语言刷题】调整奇数偶数顺序、有序序列合并以及有序序列判断
63 0
|
存储
OJ题库:俩个有序序列(数组)合并
OJ题库:俩个有序序列(数组)合并
39 0
|
算法 搜索推荐 C语言
c语言数据结构-排序(冒泡+选择+插入+希尔)
c语言数据结构-排序(冒泡+选择+插入+希尔)
|
人工智能 算法 BI
算法每日一题(合并两个有序的数组)
算法每日一题(合并两个有序的数组)
116 0
算法每日一题(合并两个有序的数组)
|
算法
每日一题——数组中重复的数据
每日一题——数组中重复的数据
86 0
每日一题——数组中重复的数据
整理关于有序序列的问题
我们可以设置两个flag,flag1代表升序,flag2代表降序。然后遍历下数组,用后面面的数减去前面的数,如果>0,则flag1++;如果<0,则flag2++;这里呢比较的话n个数比较n-1次就可以了。所以如果最后flag1==n-1或者flag2= =n-1,则表面这个数组是有序的否则不是。
92 0
|
存储 算法
数据结构上机实践第八周项目3-顺序串算法
数据结构上机实践第八周项目3-顺序串算法
153 0
数据结构上机实践第八周项目3-顺序串算法
|
C语言
牛客网带你刷 · C语言 | 有序序列判断
问:输入一个整数序列,判断是否是有序序列,有序,指序列中的整数从小到大排序或者从大到小排序(相同元素也视为有序)
202 0
牛客网带你刷 · C语言 | 有序序列判断
|
存储 算法 C语言
想要去欺负Leetcode的这些年——第二次,看看咱们是怎么把数组玩转,把数列理解透彻的~
想要去欺负Leetcode的这些年——第二次,看看咱们是怎么把数组玩转,把数列理解透彻的~
144 0
想要去欺负Leetcode的这些年——第二次,看看咱们是怎么把数组玩转,把数列理解透彻的~
|
C语言
带你刷 · C语言 | 调整奇数偶数顺序
问:调整数组使奇数全部都位于偶数前面
121 0
带你刷 · C语言 | 调整奇数偶数顺序