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;
}