顺序表应用5:有序顺序表归并

来源:互联网 发布:录像变脸软件是什么 编辑:程序博客网 时间:2024/05/29 09:41

Think:
这题 刚开始想直接 用冒泡来水题 , 后来很果断的TLE (废话 O(n^2) 的复杂度 不超时才怪), 然后 就改成了 用快排, 整体思路还是很好理解的

Problem Description

已知顺序表A与B是两个有序的顺序表,其中存放的数据元素皆为普通整型,将A与B表归并为C表,要求C表包含了A、B表里所有元素,并且C表仍然保持有序。
Input

输入分为三行:
第一行输入m、n(1<=m,n<=10000)的值,即为表A、B的元素个数;
第二行输入m个有序的整数,即为表A的每一个元素;
第三行输入n个有序的整数,即为表B的每一个元素;
Output

输出为一行,即将表A、B合并为表C后,依次输出表C所存放的元素。
Example Input

5 3
1 3 5 6 9
2 4 10
Example Output

1 2 3 4 5 6 9 10

#include<bits/stdc++.h>using namespace std;#define INF 0x3f3f3fint n, m, temp;//定义顺序表typedef int Elemtype;typedef struct{    Elemtype *elem;    int length;    int listsize;} sqlist;void mal(sqlist &L){    L.elem = (Elemtype *)malloc(INF * sizeof(Elemtype));    L.length = 0;}void qsort(sqlist &L, int LF, int RT){    int x = L.elem[LF], i = LF, j = RT;    if (LF >= RT) return ;    while(i < j)    {        while(i < j&&L.elem[j] >= x) j --;        L.elem[i] = L.elem[j];        while(i < j&&L.elem[i] <= x) i ++;        L.elem[j] = L.elem[i];    }    L.elem[i] = x;    qsort(L, LF, i - 1);    qsort(L, i + 1, RT);}void input(sqlist &L,int len){    L.listsize = len;    int i;    for(i = temp; i < temp + len; i++)    {        cin >> L.elem[i];//            judge(L,L.elem[L.length],L.length);    }}//输出函数void output(sqlist &L){    int i;    for(i = 0; i <= n + m - 1; i++)    {        if (i ==  n + m - 1)            cout << L.elem[i] << endl;        else            cout << L.elem[i] << " ";    }}int main(){    while(cin >> n >> m)    {        sqlist L;        mal(L);        temp = 0;        input(L , n);        temp = n;        input(L , m);//        L.elem[n] = m;        qsort(L, 0, n + m - 1);        output(L);    }}