入门级归并算法-1215 # 教官的任务-边比较边输出

问题描述

   现有两个数组 A 和 B,数组 A 是升序排序的有序数组,数组 B 是降序排序的有序数组,要求把这两个数组合并为一个升序排序的有序数组。

输入

  第一行输入 N(1 <= N <= 100) 和 M(1 <= M <= 100),分别代表数组 A 和 B 的长度。
  第二行输入 N 个数,代表数组 A 。
  第三行输入 M 个数,代表数组 B 。

输出

  输出一行合并后的数组。

输入范例

 3 4
 2 3 5
 6 4 2 1

输出范例

 1 2 2 3 4 5 6

 clew:

  解决方法有多种,在这里我用边比较边输出的方式。由于我在网上搜索无果,于是想了一个晚上的时间想到一种不使用第三个数组解题的方法。在这里给大家提供一些参考。

 1.将一个数组全部比较输出,再输出剩余的数组。由于2个数组都是有序,但一个为升序,一个为降序。所以在一开始输入时便将降序的数组逆着输入数组。
 2.判断数组是否输出完。
 3.判断大小

code:
#include"stdio.h"

int main()
{
    int a[105],b[105];
    int i;
    int n,m;
    scanf("%d%d",&n,&m);
    if(n<0||m<0)
    {
        return 0;
    }
    for(i=0;i<n;i++)
    {
        scanf("%d",&a[i]);
    }
    for(i=m-1;i>=0;i--)
    {
        scanf("%d",&b[i]);
    }

    int j=0;
    while(i<n||j<m)
    {
        if(a[i]<=b[j]&&i<n)
        {
            printf("%d ",a[i]);
            i++;
        }
        if(a[i]>b[j]&&j<m)
        {
            printf("%d ",b[j]);
            j++;
        }
        if(i>=n&&j<m)
        {
            printf("%d ",b[j]);
            j++;
        }
        if(i<n&&j>=m)
        {
            printf("%d ",a[i]);
            i++;
        }
    }
    printf("\n");
    
    return 0;
}

 ps:如有更好的见解,欢迎提出。

猜你喜欢

转载自www.cnblogs.com/k1611331115/p/10462470.html