顺序表应用5:有序顺序表归并
Time Limit: 100MS Memory limit: 800K
题目描述
输入
第一行输入m、n(1<=m,n<=10000)的值,即为表A、B的元素个数;
第二行输入m个有序的整数,即为表A的每一个元素;
第三行输入n个有序的整数,即为表B的每一个元素;
输出
示例输入
5 3 1 3 5 6 9 2 4 10
示例输出
1 2 3 4 5 6 9 10
提示
这个题跟链表的归并差不多
#include<stdio.h>
#include<cstdlib>
#include<iostream>
using namespace std;
typedef struct
{
int *elem;
int len;
} list;
void creat(list &l,int n)
{
l.elem=new int [n];
l.len=0;
for(int i=0; i<n; i++)
{
cin>>l.elem[i];
l.len++;
}
}
void Move(list &l,int n,int m)
{
for(int i=0; i<m; i++)
{
l.elem[i+n]=l.elem[i];
}
}
void Change(list &l,int m,int r)
{
int t;
for(int i=m; i<(m+r)/2; i++)
{
t=l.elem[i];
l.elem[i]=l.elem[r-i-1+m];
l.elem[r-i-1+m]=t;
}
}
void Merge(list &l1,list &l2,list &l)
{
int k=0,i=0,j=0;
while(i<l1.len&&j<l2.len)
{
if(l1.elem[i]<l2.elem[j])
{
l.elem[k++]=l1.elem[i];
i++;
}
else
{
l.elem[k++]=l2.elem[j];
j++;
}
}
while(i<l1.len)
{
l.elem[k++]=l1.elem[i];
i++;
}
while(j<l2.len)
{
l.elem[k++]=l2.elem[j];
j++;
}
}
int main()
{
list node1,node2,node;
int n,m,k;
cin>>n>>m;
creat(node1,n);
creat(node2,m);
node.elem=new int [21000];
Merge(node1,node2,node);
for(int i=0; i<n+m; i++)
{
if(i==n+m-1)
{
cout<<node.elem[i]<<endl;
}
else
cout<<node.elem[i]<<" ";
}
return 0;
}