0
点赞
收藏
分享

微信扫一扫

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

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所存放的元素。

Sample

Input

5 3
1 3 5 6 9
2 4 10

Output

1 2 3 4 5 6 9 10

Hint

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define max 20000
struct sequencelist{
    int *element;
    int length;
    int maxsize;
};
void create(struct sequencelist *seqlist, int len){
    int i;
    for(i = 0; i < len; i++){
        scanf("%d", &seqlist -> element[i]);
    }
    seqlist -> length = len;
}
void quicksort(struct sequencelist *seqlist, int lt, int rt){
    int i, j;
    int key;
    i = lt;
    j = rt;
    key = seqlist -> element[lt];
    if(lt >= rt){
        return;
    }
    while(i < j){
        while(i < j && seqlist -> element[j] >= key){
            j--;
        }
        seqlist -> element[i] = seqlist -> element[j];
        while(i < j && seqlist -> element[i] <= key){
            i++;
        }
        seqlist -> element[j] = seqlist -> element[i];
    }
    seqlist -> element[i] = key;
    quicksort(seqlist, lt, i - 1);
    quicksort(seqlist, i + 1, rt);
}
void combine(struct sequencelist *seqlist1, struct sequencelist *seqlist2,struct sequencelist *seqlist3, int m, int n){
    int i;
    int j;
    for(i = 0; i < m; i++){
        seqlist3 -> element[i] = seqlist1 -> element[i];
    }
    for(i = 0; i < n; i++){
        seqlist3 -> element[i + m] = seqlist2 -> element[i];
    }
    seqlist3 -> length = m + n;
    quicksort(seqlist3, 0, m + n - 1);
}
void display(struct sequencelist *seqlist){
    int i;
    for(i = 0; i < seqlist -> length - 1; i++){
        printf("%d ", seqlist -> element[i]);
    }
    printf("%d\n", seqlist -> element[seqlist -> length - 1]);
}
int main(){
    int n;
    int m;
    scanf("%d %d", &m, &n);
    struct sequencelist *seqlista;
    struct sequencelist *seqlistb;
    struct sequencelist *seqlistc;
    seqlista = (struct sequencelist *)malloc(sizeof(struct sequencelist));
    seqlista -> element = (int *)malloc(max * sizeof(int));
    seqlista -> length = 0;
    seqlista -> maxsize = max;
    seqlistb = (struct sequencelist *)malloc(sizeof(struct sequencelist));
    seqlistb -> element = (int *)malloc(max * sizeof(int));
    seqlistb -> length = 0;
    seqlistb -> maxsize = max;
    seqlistc = (struct sequencelist *)malloc(sizeof(struct sequencelist));
    seqlistc -> element = (int *)malloc(max * sizeof(int));
    seqlistc -> length = 0;
    seqlistc -> maxsize = max;
    create(seqlista, m);
    create(seqlistb, n);
    combine(seqlista, seqlistb, seqlistc, m, n);
    display(seqlistc);
    return 0;
}
举报

相关推荐

0 条评论