【2010】合并两个有序数列

Time Limit: 3 second
Memory Limit: 2 MB

用合并的方法把两个有序数列a,b合并为一个新的有序数列c;
算法是:比较a和b,把两者小的数放到c中,一直继续此操作。

Input

第一行输入数列a的元素个数
第二行依次输入a的元素
第三行输入数列b的元素个数
第四行依次输入b的元素

Output

输出合并后的数列c,每个元素用空格隔开,最后用回车结束

Sample Input

3
7 17 19
4
8 24 34 40

Sample Output

7 8 17 19 24 34 40

【题解】

直接把两行数字输入进一个数组,然后用快排 或者是冒泡排下序就可以了。

【代码】

#include <cstdio>

const int MAXN = 50000;

int n,a[MAXN],x,y;

void input_data()
{
    int j = 0;
    scanf("%d",&x);
    for (int i = 1;i <= x;i++)
        {
                j++;
                scanf("%d",&a[j]);
        }
    scanf("%d",&y);
    for (int i = 1;i <= y;i++)
        {
                j++;
                scanf("%d",&a[j]);
        }
    n = x + y; //也可以写成 n = j。
}

void q_sort(int l,int r) //快排
{
    int i = l, j = r, m = a[(i+j)/2];
    do
    {
        while (a[i] < m) i++;
        while (m < a[j]) j--;
        if (i <=j )
            {
                    int t = a[i];
                    a[i] = a[j];
                    a[j] = t;
                    i++;j--;
            }
    }
    while ( i <= j);
    if (l < j) q_sort(l,j);
    if (i < r) q_sort(i,r);
}

void output_ans()
{
        for (int i = 1; i <= n-1;i++)
            printf("%d ",a[i]);
        printf("%d
",a[n]);
}

int main()
{
    input_data();
    q_sort(1,n);
    output_ans();
    return 0;
}


 

原文地址:https://www.cnblogs.com/AWCXV/p/7632484.html