zoukankan      html  css  js  c++  java
  • [codevs3296]有序数组合并

    题目描述 Description

    合并两个有序数组A和B,使得结果依然有序。

    进阶:合并两个有序数组A和B,假设A有n个数,B有m个数,A数组后面还有m个空余空间,需要将结果保存在A中。

    请使用O(n)的算法完成

    输入描述 Input Description

    第一行输入两个整数n和m

    第二行输入n个用空格隔开的整数表示数组A

    第三行输入m个用空格隔开的整数表示数组B

    输入保证A和B数组非递减

    输出描述 Output Description

    输出一行一共n+m个空格隔开的整数,即合并后的结果

    样例输入 Sample Input

    2 3 

    1  2

    1 1 5

    样例输出 Sample Output

    1 1 1 2 5

    数据范围及提示 Data Size & Hint

    1<=n,m<=1000000

    思路

    用三个指针分别指向正在处理的两个数组和结果数组,最后需要看一看是不是全部比较完了,时间复杂度O(n);

    var n,m,i,j,k,x:longint;
        a,b,c:array[1..10000000] of int64;
    begin
        readln(n,m);
        for i:=1 to n do read(a[i]);
        for i:=1 to m do read(b[i]);
        i:=1;//a的指针
        j:=1;//b的指针
        k:=1;//末尾的指针
        while (i<>n+1)and(j<>m+1) do
            begin
                if a[i]<=b[j] then
                    begin
                        c[k]:=a[i];
                        inc(i);
                        inc(k);
                    end
                else
                    begin
                        c[k]:=b[j];
                        inc(j);
                        inc(k);
                    end;
            end;
       // inc(k);
        for x:=i to n do
            begin
                c[k]:=a[x];
                inc(k);
             end;
        for x:=j to m do
            begin
                c[k]:=b[x];
                inc(k);
            end;
        for i:=1 to (n+m) do write(c[i],' ');
    end.
    View Code
  • 相关阅读:
    快速排序理论---不含源码
    归并排序理论---不含源码
    希尔排序(shell)理论---不含源码
    Visual C++中error spawning cl.exe解决办法
    数据库的基础知识点---1
    冒泡排序的基础知识部分(不含源码)
    在虚拟机的Linux系统下安装wineqq
    数据变量的别名
    void*和void类型
    变量的作用域和连接性
  • 原文地址:https://www.cnblogs.com/yangqingli/p/4741637.html
Copyright © 2011-2022 走看看