列表

详情


BC121. 有序序列合并

描述

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

数据范围: , 序列中的值满足

输入描述

输入包含三行,

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

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

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

输出描述

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

示例1

输入:

5 6
1 3 7 9 22
2 8 10 17 33 44

输出:

1 2 3 7 8 9 10 17 22 33 44

原站题解

C 解法, 执行用时: 1ms, 内存消耗: 292KB, 提交时间: 2021-09-08

#include <stdio.h>
int main()
{
    int a,b,c[100],temp;
    scanf("%d",&a);
    scanf("%d",&b);
    for(int i=1;i<=a+b;i++){
        scanf("%d",&c[i]);
    }
    for (int i = 1; i <= a+b; i++)
	{
		for (int j = 1; j <= a+b - i; j++)
		{
			if (c[j] > c[j + 1])
			{
				temp = c[j];
				c[j] = c[j + 1];
				c[j + 1] = temp;
			}
		}
	}
    for(int i=1;i<a+b+1;i++){
        printf("%d ",c[i]);
    }
    return 0;
}

C 解法, 执行用时: 1ms, 内存消耗: 328KB, 提交时间: 2021-09-09

#include<stdio.h>
#include<stdlib.h>
int main()
{
	//int a, b;
	//scanf("%d %d", &a, &b);
	//int* p1 = (int*)malloc(a * sizeof(int));
	//int* p2 = (int*)malloc(b * sizeof(int));
	//int i;
	//for (i = 0; i < a; i++)
	//{
	//	p1[i] = scanf("%d", p1 + i);
	//}
	//for (i = 0; i < b; i++)
	//{
	//	p2[i] = scanf("%d", p2 + i);
	//}
	//
	////合并p2和p3
	//int* p3 = (int*)malloc((a + b) * sizeof(int));
	//for (i = 0; i < a + b; i++)
	//{
	//	if (i < a)
	//		p3[i] = p1[i];
	//	else
	//		p3[i] = p2[i - a];
	//}
	
	int a, b;
	scanf("%d %d", &a, &b);
	int p1[100] = { 0 };
	int p2[100] = { 0 };
	int i;
	for (i = 0; i < a; i++)
	{
		scanf("%d", p1+i);
	}
	for (i = 0; i < b; i++)
	{
		scanf("%d", p2+i);
	}
	int p3[200] = { 0 };
	for (i = 0; i < a + b; i++)
	{
		if (i < a)
			p3[i] = p1[i];
		else
			p3[i] = p2[i - a];
	}


	//冒泡排序
	for (i = 0; i < a + b; i++)
	{
		int j = 0;
		for (j = 0; j < a + b - 1 - i; j++)
		{
			if (p3[j] > p3[j + 1])
			{
				int tmp = p3[j];
				p3[j] = p3[j + 1];
				p3[j + 1] = tmp;
			}
		}
	}

	//打印
	for (i = 0; i < a + b; i++)
	{
		printf("%d ", p3[i]);
	}

	return 0;
}

C 解法, 执行用时: 1ms, 内存消耗: 332KB, 提交时间: 2021-09-19

#include <stdio.h>
#include <string.h>
int compare(const void*e1,const void*e2)
{
    int* a = (int*) e1;
    int* b = (int*) e2;
    return *a - *b;
}
void scan(int arr1[],int arr2[],int arr3[],int n,int m)
{
    int i;
    int j;
    for(i=0,j=0;i<n;i++,j++)
    {
        scanf("%d",&arr1[i]);
        arr3[j]=arr1[i];
    }
       for(i=0;i<m;i++,j++)
    {
        scanf("%d",&arr2[i]);
           arr3[j]=arr2[i];
    }
}
 int main()
 {
     int i;
     int arr1[5000];
     int arr2[5000];
     int arr3[5000];
     int n,m;
     scanf("%d%d",&n,&m);
     scan(arr1,arr2,arr3,n,m);
     qsort(arr3,n+m,sizeof(int),compare);
      for(i=0;i<m+n;i++)
    {
        printf("%d ",arr3[i]);
    }
     
     return 0; 
 }

C 解法, 执行用时: 1ms, 内存消耗: 332KB, 提交时间: 2021-09-08

#include <stdio.h>
int main()
{
    int x,y;
    scanf("%d %d",&x,&y);
    int arr[x+y];
    for(int i = 0;i < x+y;i++)
    {
        scanf("%d",&arr[i]);
    }
    for(int i = 0;i < x+y-1;i++)
    {
        for(int j = 0;j < x+y-1-i;j++)
        {
            if(arr[j] > arr[j+1])
            {
                int m = arr[j];
                arr[j] = arr[j+1];
                arr[j+1] = m;
            }
        }
    }
    for(int i = 0;i < x+y;i++)
    {
        printf("%d ",arr[i]);
    }
}

C 解法, 执行用时: 1ms, 内存消耗: 332KB, 提交时间: 2021-09-07

#include<stdio.h>
int main()
{
    int n,m,i,j,a=0,b=0,c=0;
    scanf("%d %d",&n,&m);
    int arr1[n],arr2[m],arr3[m+n];
    for(i=0;i<n;i++)
    {
        scanf("%d",&arr1[i]);
    }
    for(j=0;j<m;j++)
    {
        scanf("%d",&arr2[j]);
    }
    while(a<n&&b<m)
    {
        if(arr1[a]<arr2[b])
            arr3[c++]=arr1[a++];
        else
            arr3[c++]=arr2[b++];
    }
    while(a<n)
    {
        arr3[c++]=arr1[a++];
    }
    while(b<m)
    {
        arr3[c++]=arr2[b++];
    }
    for(i=0;i<n+m;i++)
    {
        printf("%d ",arr3[i]);
    }
    return 0;
}

上一题