首页 > 试题广场 >

有序序列合并

[编程题]有序序列合并
  • 热度指数:758 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
输入两个升序排列的序列,将两个序列合并为一个有序序列并输出。

输入描述:
输入包含三行,

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

第二行包含n个整数(范围1~5000),用空格分隔。

第三行包含m个整数(范围1~5000),用空格分隔。


输出描述:
输出为一行,输出长度为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
//
// Created by yuanhao on 2019-9-16.
//
 
#include <iostream>
 
using namespace std;
 
int main() {
    int n;
    int m;
    cin >> n >> m;
    int a[n];
    int b[m];
    for (int i = 0; i < n; ++i) {
        cin >> a[i];
    }
    for (int i = 0; i < m; ++i) {
        cin >> b[i];
    }
    int len = n + m;
    int index = 0;
    int ai = 0;
    int bi = 0;
    while (index < len) {
        if (ai == n) {
            cout << b[bi] << " ";
            bi++;
        } else if (bi == m) {
            cout << a[ai] << " ";
            ai++;
        } else if (a[ai] > b[bi]) {
            cout << b[bi] << " ";
            bi++;
        } else {
            cout << a[ai] << " ";
            ai++;
        }
        index++;
    }
    cout << endl;
    return 0;
}

发表于 2019-09-16 10:03:23 回复(0)
#define SIZE 5000
#include <stdio.h>

int main() {
    int arr_n[SIZE] = {0};
    int arr_m[SIZE] = {0};
    int n = 0;
    int m = 0;
    int i = 0;
    int j = 0;

    //输入n、m
    scanf("%d %d", &n, &m);

    //输入n数列
    for (i = 0; i < n; i++) {
        scanf("%d", arr_n + i);
    }

    //输入m数列
    for (i = 0; i < m; i++) {
        scanf("%d", arr_m + i);
    }

    i = 0;

    //进行比较打印
    while (i < n && j < m) {
        if (arr_n[i] < arr_m[j]) {
            printf("%d ", arr_n[i]);
            i++;
        } else {
            printf("%d ", arr_m[j]);
            j++;
        }
    }
    //打印剩余数组
    while (i < n) {
        printf("%d ", arr_n[i]);
        i++;
    }
    while (j < m) {
        printf("%d ", arr_m[j]);
        j++;
    }

    return 0;
}

编辑于 2024-01-25 16:42:17 回复(0)
#include<stdio.h>
int main() {
    int n, m, x;
    scanf("%d%d", &n, &m);
    int arr1[n];
    int arr2[m];
    int arr[n + m];
    for (int i = 0; i < n; i++)
        scanf("%d", &arr1[i]);
    for (int i = 0; i < m; i++)
        scanf("%d", &arr2[i]);
    int i = 0, j = 0, k = 0;
    while (i < n && j < m) {
        if (arr1[i] <= arr2[j]) {
            arr[k] = arr1[i];
            i++;
            k++;
        } else {
            arr[k] = arr2[j];
            j++;
            k++;
        }
    }
    if (i<n)
        for (; i < n; i++, k++)
            arr[k] = arr1[i];
    else
        for (; j < m; j++, k++)
            arr[k] = arr2[j];
    for (int x = 0; x < n + m; x++)
        printf("%d ", arr[x]);
    return 0;
}
编辑于 2023-12-14 22:10:46 回复(0)
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
    int m, n = 0;
    scanf("%d %d", &n, &m);
    int arr1[1000] = { 0 };
    for (int i = 0; i < n; i++ ) {
        scanf("%d ", &arr1[i]);
    }
    int arr2[1000] = { 0 };
    for (int i= 0; i< m; i++ ) {
        scanf("%d ", &arr2[i]);
    }
    int i = 0;
    int j = 0;
    while (i<n&&j<m) {
        if (arr1[i] < arr2[j]) {
            printf("%d ", arr1[i]);
            i++;
        }
        else {
            printf("%d ", arr2[j]);
            j++;

        }
    }
    while (i < n) {
        printf("%d ", arr1[i]);
        i++;
    }
    while (j < m) {
        printf("%d ", arr2[j]);
        j++;
    }

    return 0;
}
发表于 2023-12-07 00:00:16 回复(0)
int main()
{
    int n = 0;
    int m = 0;
    scanf("%d %d",&n,&m);
    int arr1[n];
    int arr2[m];
    int arr3[n + m];
    int i = 0;
    for (i = 0; i < n; i++)
    {
        scanf("%d",&arr1[i]);
    }
    for (i=0;i<m;i++)
    {
        scanf("%d",&arr2[i]);
    }
    int r = 0;
    int j = 0;
    int k = 0;
    while (j < n && k < m)
    {
        if (arr1[j] < arr2[k])
        {
            arr3[r++] = arr1[j];
            j++;
        }
        else
        {
            arr3[r++] = arr2[k];
            k++;
        }
    }

    if (j < n)
    {
        for (; j < n; j++)
        {
            arr3[r++] = arr1[j];
        }
    }
    else
    {
        for (; k < m; k++)
        {
            arr3[r++] = arr2[k];
        }
    }
    for (i = 0; i < n + m; i++)
    {
        printf("%d",arr3[i]);
    }
    return 0;
}
发表于 2023-12-01 16:05:41 回复(0)
#include<stdio.h>

int main() {
    int m, n;
    scanf("%d %d", &m, &n);
    int arr1[100] = {};
    int arr2[100] = {};
    for (int i = 0;i < m;i++) {
        scanf("%d", &arr1[i]);
    }
    for (int i = 0;i < n;i++) {
        scanf("%d", &arr2[i]);
    }
    int j = 0;
    int i = 0;
    while(i<m&&j<n)
    {
        if (arr1[i] < arr2[j]) {
            printf("%d ", arr1[i]);
            i++;
        }
        else { printf("%d ", arr2[j]);j++; }
    }
    if (n > j) {
        for (;j < n;j++) {
            printf("%d ", arr2[j]);
        }
    
    }
    else {
        for (;i < m;i++) {
            printf("%d ", arr1[i]);
    } }
        return 0;
}

发表于 2023-11-16 21:02:44 回复(0)
#include <stdio.h>
int main()
{
    int arr1[1000] = { 0 };
    int arr2[1000] = { 0 };
    int arr3[2000] = { 0 };
    int m, n;
    scanf("%d%d", &m, &n);
    for (int i = 0; i < m; i++)
    {
        scanf("%d", &arr1[i]);
    }
    for (int i = 0; i < n; i++)
    {
        scanf("%d", &arr2[i]);
    }
    int i = 0;
    int j = 0;
    int k = 0;
    while (i < m && j < n)
    {
        if (arr1[i] < arr2[j])
        {
            arr3[k] = arr1[i];
            i++;
            k++;
        }
        else
        {
            arr3[k] = arr2[j];
            j++;
            k++;
        }
    }
    if (i !=m)
    {
        while (i < m)
        {
            arr3[k] = arr1[i];
            k++;
            i++;
        }
    }
    if (j != n )
    {
        while (j < n)
        {
            arr3[k] = arr2[j];
            k++;
            j++;
        }
    }
    k = 0;
    for (k = 0; k < m + n; k++)
    {
        printf("%d ", arr3[k]);
    }
    return 0;
}
发表于 2023-04-23 14:55:07 回复(0)
#include<bits/stdc++.h>
using namespace std;
int n,m,a[10001];
int main(){
    cin>>n>>m;
    for(int i=0;i<n+m;++i) cin>>a[i];
    sort(a,a+n+m);
    for(int i=0;i<n+m;++i) cout<<a[i]<<" ";
    return 0;
}

发表于 2019-11-11 20:14:32 回复(1)
#include <iostream>
#include <vector>
#include <algorithm>
#include <cmath>
#include <climits>

using namespace std;

const int N = 110;

int n, m;
int a[N], b[N];

int main()
{
    cin.tie();
    ios::sync_with_stdio(false);
    cin >> n >> m;
    for (int i = 0; i < n; i++) cin >> a[i];
    for (int i = 0; i < m; i++) cin >> b[i];
    int i = 0, j = 0;
    while (i < n && j < m) {
        if (a[i] < b[j]) {
            cout << a[i++] << " ";
        } else {
            cout << b[j++] << " ";
        }
    }
    while (i < n) cout << a[i++] << " ";
    while (j < m) cout << b[j++] << " ";
    cout << endl;
    return 0;
}

发表于 2019-11-05 14:52:58 回复(0)
import java.util.*;

public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        int n = 0,m = 0;
        if(sc.hasNext()){
            n = sc.nextInt();
            m = sc.nextInt();
        }
        int[] arr1 = new int[n];
        int[] arr2 = new int[m];
        for(int i = 0; i < n; i++){
            arr1[i] = sc.nextInt();
        }
        for(int j = 0; j < m; j++){
            arr2[j] = sc.nextInt();
        }
        int[] res = getSortedRes(arr1,arr2);
        for(int i : res){
            System.out.print(i + " ");
        }
    }
    
    public static int[] getSortedRes(int[] arr1, int[] arr2){
        if(arr1==null||arr2==null){
            return null;
        }
        int len1 = arr1.length;
        int len2 = arr2.length;
        int[] help = new int[len1+len2];
        int i = 0, j = 0, k = 0;
        while(i<len1&&j<len2){
            if(arr1[i]<arr2[j]){
                help[k++] = arr1[i++];
            }else{
                help[k++] = arr2[j++];
            }
        }
        while(i<len1){
            help[k++] = arr1[i++];
        }
        while(j<len2){
            help[k++] = arr2[j++];
        }
        return help;
    }
}
发表于 2019-09-15 22:17:36 回复(0)
n,m = map(int,input().split())
a = list(map(int,input().split()))
b = list(map(int,input().split()))
c = a+b
c.sort()
res = ""
for i in c:
    res +=str(i)+" "
print(res.strip())

发表于 2019-09-12 15:22:56 回复(0)
let inputNum = readline().split(' ');
let N = parseInt(inputNum[0]);
let M = parseInt(inputNum[1]);
let listN = readline().split(' ');
let listM = readline().split(' ');
let newList = [];
for(let i=0; i<N; i++){
    while(listM.length && parseInt(listN[i])>parseInt(listM[0])){
        newList.push(listM.shift());
    }
    newList.push(listN[i]);
}
while(listM.length){
    newList.push(listM.shift());
}
print(newList.join(' '));

发表于 2019-09-12 14:05:26 回复(0)

问题信息

上传者:小小
难度:
12条回答 2816浏览

热门推荐

通过挑战的用户