两个有序数列的合并

题目描述

已知数组a中有m个按升序排列的元素,数组b中有n个按降序排列的元素,编程将a与b中的所有元素按降序存入数组c中。

输入

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

输出

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

样例输入

4 1 3 5 7 3 6 4 2

样例输出

7 6 5 4 3 2 1

提示

试图排序的孩子们要小心了~~~~~~

 1 # include <stdio.h>
 2 # define N 1000010
 3 int a[N], b[N], c[2 * N];
 4 int main ()
 5 {
 6     int i, j, k, m, n, flag = 0;
 7     scanf("%d", &m);
 8     for (i = m - 1; i >= 0; i--)
 9         scanf("%d", &a[i]);
10
11     scanf("%d", &n);
12     for (j = 0; j < n; j++)
13         scanf("%d", &b[j]);
14     i = 0;
15     j = 0;
16     k = 0;
17     while (i < m && j < n)
18     {
19         if (a[i] > b[j])
20             c[k++] = a[i++];
21         else
22             c[k++] = b[j++];
23     }
24     while (i < m)
25         c[k++] = a[i++];
26     while (j < n)
27         c[k++] = b[j++];
28     for (i = 0; i < k; i++)
29     {
30         if (flag == 0)
31             printf("%d", c[i]);
32         else
33             printf(" %d", c[i]);
34         flag = 1;
35     }
36     printf("\n");
37     return 0;
38 }
时间: 2024-12-05 20:27:00

两个有序数列的合并的相关文章

求两个有序数列的合并——分治算法

用分治算法来求一个数组的排序 分治算法:例如:将两个数组a[100]={2,4,5,7,1,2,,3,6}.这个数组排序 先将这个数组分为均两部分得到{2,4,5,7},{1,2,3,6}. 再将{2,4,5,7}分为两部分{2,4},{5,7}. 再分为{2},{4}. 这时一个数就不用排序了,直接输出自己. 简单问题,就可以用二分或者三分来算. 上代码: #include <bits/stdc++.h> using namespace std; void hebing(int a[],in

对两个有序数组进行合并

问题描述: 数组arr[0...mid-1]和arr[mid..n-1]是各自有序的,对数组arr[0..n-1]的两个有序段进行合并,得到arr[0..n-1]整体.要求空间复杂度为O(1) eg:{1,3,5,7,2,4,6}合并成{1,2,3,4,5,6,7} 思路: 方法一 很显然,看到这个题目就想到了归并中的合并算法,时间复杂度为O(n),但是很可惜空间复杂度也是O(n)不满足要求.但是还是作为一种解决方案提出来吧,具体实现代码就不列了. 方法二 此外,对于部分有序的我们能想到的是插入

小算法:合并两个有序数组,合并之后仍然有序

1 /** 2 * 合并两个有序数组,合并后仍然有序 3 * @param a 要合并的数组A 4 * @param b 要合并的数组B 5 * @param c 合并后的数组C 6 */ 7 public static void merge(int a[] ,int b[],int c[]){ 8 int lengthA = a.length; 9 int lengthB = b.length; 10 11 int indexA = 0; 12 int indexB = 0; 13 int i

两个有序数组的合并,python版

看到其他部门的笔试题,发现有这个题目:两个有序数组的合并,于是尝试着用python写出来 具体如下: if __name__ == '__main__':     a=[2,4,6,8,9,10]     b=[0,1,3,6,7,9,100,134]     counta=countb=0#分别记录两个数组遍历到哪个位置了     c=[]     for i in range(counta,len(a)):         for j in range(countb,len(b)):    

递归实现两个有序链表的合并

package com.wyl.linklist; /** * 合并两个链表 * @author wyl */ public class MergeLinkList { /** * 内部类,链表节点的结构 * @author wyl * */ public static class Node{ private int val; //节点值 private Node next; //节点的后继节点 public Node(){ } public Node(int val){ this(val,nu

两组有序数列的中位数

两组升序排列的数组A[m]和B[n], 求他们的中位数. 注意,中位数的概念哦-相信你会百度一下的- 格式: 第一行输入数字m,接下来一行输入数组A[m], 第三行输入数字n,第四行输入数组B[n],接下来输出中位数.两个数组的长度都不超过1000. 注意,需要保留5位小数哦-所以,你设计函数的时候请设计成double类型哦- 样例输入 1 3 5 1 2 4 5 6 样例输出 3.50000 package jsk; import java.util.Scanner; public class

logn+m复杂度找两个有序数列的中位数

class Solution { public: double fun(vector<int> nums1,int n,vector<int> nums2,int m,int k) { if(nums1.size()-n>nums2.size()-m) return fun(nums2,m,nums1,n,k); if(n==nums1.size()) return nums2[k-1+m]; if(k==1) return min(nums1[n],nums2[m]); i

两个有序链表的合并

笔记和代码的思路来源: 好大学慕课浙江大学陈越.何钦铭的<数据结构> 1 #include <stdio.h> 2 #include <stdlib.h> 3 4 typedef int ElementType; 5 typedef struct Node *PtrToNode; 6 struct Node { 7 ElementType Data; 8 PtrToNode Next; 9 }; 10 typedef PtrToNode List; 11 12 List

将两个有序顺序表合并成一个新的有序顺序表

#include <stdio.h> #include <malloc.h> #include <stdlib.h> #define MaxSize 50 typedef struct { int data[MaxSize]; int length; }SqList; void ListInsert(SqList *L,int i,int e) { int j; if(i<1||i>L->length+1) exit(-1); if(L->len