顺序表应用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
//ios::sync_with_stdio(false); #include<iostream> #include<stdlib.h> #include<stdio.h> #define MaxSize 100001 using namespace std; typedef int element; typedef struct List{ element data[MaxSize]; int size; }list1,list2,list3; void init(list1 &l1,list2 &l2,int a,int b,list3 &l3){ for(int i = 0 ; i < a;i++){ l1.data[i] = 0; } l1.size = a; for(int i = 0 ; i < b;i++){ l2.data[i] = 0; } l2.size = b; for(int i = 0 ; i < a + b;i++){ l3.data[i] = 0; } l3.size = a + b; } void input(list1 &l1,list2 &l2,int a,int b){ int j; for(int i = 0 ; i < a;i++){ cin >> j; l1.data[i] = j; //printf("%d ",l1.data[i]); } for(int i = 0 ; i < b;i++){ cin >> j; l2.data[i] = j; //printf("%d ",l2.data[i]); } } void merge(list1 &l1,list2 &l2,list3 &l3){ int aa = 0,bb = 0,index = 0; int c = l1.size + l2.size; //printf("%d ",c); while(c--){ int a = (aa >= l1.size ? 65535 : l1.data[aa]); //printf("%d ",a); int b = (bb >= l2.size ? 65535 : l2.data[bb]); if(a > b){ l3.data[index++] = b; //printf("%d ",a); bb++; }else{ l3.data[index++] = a; aa++; } } } void output(list3 &l3){ int i; for(i = 0 ; i < l3.size - 1;i++){ printf("%d ",l3.data[i]); } printf("%d ",l3.data[i]); } int main(){ ios::sync_with_stdio(false); int a,b; list1 l1; list2 l2; list3 l3; cin >> a >> b; init(l1,l2,a,b,l3); input(l1,l2,a,b); merge(l1,l2,l3); output(l3); }