顺序表应用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
 1 #include<stdio.h>
 2 void fun(int *a, int m,int *b,int n, int *c)
 3 {
 4     int i = 0;
 5     int j = 0;
 6     int k = 0;
 7     while(i<m&&j<n)//每次都放一个小的
 8     {
 9         if(a[i]<b[j])
10             c[k++] = a[i++];
11         else
12             c[k++] = b[j++];
13     }
14     while(i<m)//没用完的放进去,a和b最多一个没用完
15         c[k++] = a[i++];
16     while(j<n)
17         c[k++] = b[j++];
18 }
19 int main()
20 {
21     int m,n;
22     scanf("%d%d",&m,&n);
23     int a[10005];
24     int b[10005];
25     int c[20005];//至少两倍,一开始开少了
26     int i;
27     for(i=0; i<m; i++)
28         scanf("%d",&a[i]);
29     for(i=0; i<n; i++)
30         scanf("%d",&b[i]);
31     fun(a,m,b,n,c);
32     for(i=0; i<m+n; i++)
33     {
34         if(i==0)
35             printf("%d",c[i]);
36         else
37             printf(" %d",c[i]);
38     }
39 
40     return 0;
41 }

 

posted @ 2020-07-25 10:47  爱写程序的机械师  阅读(126)  评论(0)    收藏  举报