1124: 两个有序数组合并 C语言

1124: 两个有序数组合并
时间限制: 1 Sec 内存限制: 128 MB
提交: 16360 解决: 6644
[状态] [讨论版] [提交] [命题人:admin]
题目描述
已知数组a中有m个按升序序排列的元素,数组b中有n个降序排列的元素,编程将a与b中的所有元素按降序存入数组c中。

输入
输入有两行,第一行首先是一个正整数m,然后是m个整数;第二行首先是一个正整数n,然后是n个整数,m, n均小于等于1000000。

输出
输出合并后的m+n个整数,数据之间用空格隔开。输出占一行。

样例输入 Copy
4 1 2 5 7
3 6 4 2
样例输出 Copy
7 6 5 4 2 2 1
提示
试图排序的孩子们要小心了~~~~~~

#include <stdio.h>
#include <stdlib.h>
 
#define N 1000000
int a[N],b[N];
 
//两个有序数组合并 
int main()
{
    
    
    int i,j;
    int m,n;
    //输入m,表示m个整数 
    scanf("%d",&m);
    for(i = m - 1; i >= 0; i--)
        scanf("%d",&a[i]);
      
    //输入n,表示n个整数   
    scanf("%d",&n);
    for(j = 0; j < n; j++)
        scanf("%d",&b[j]);
  
    i = 0, j = 0;
    int k = 0;
    int c[m + n];
     
    //降序合并两个有序数组 
    while(i < m && j < n)
    {
    
    
        if(a[i] >= b[j])
            c[k++] = a[i++];
        else
            c[k++] = b[j++];
    }
    //如果a中有剩余合并到c中 
    while (i < m)
        c[k++] = a[i++];
    //如果b中有剩余合并到c中 
    while (j < n)
        c[k++] = b[j++];
     
    //输出c中元素 
    for(k = 0; k < m + n; k++)
        printf("%d ",c[k]);
    return 0;
  
}

Guess you like

Origin blog.csdn.net/m0_45306379/article/details/120955528