有序序列的归并
问题描述
现有两个有序序列(假设从小到大),将它们合并为一个新的序列,新序列依然有序(从小到大)。
代码
#include<stdio.h>
int main(){
int n,m;
printf("请输入序列1的长度:");
scanf("%d",&n);
int s1[n];
printf("输入序列1的元素:\n");
for(int i=0;i<n;i++) scanf("%d",&s1[i]);
printf("\n");
printf("请输入序列2的长度:");
scanf("%d",&m);
int s2[m];
printf("请输入序列2的元素:\n");
for(int i=0;i<m;i++) scanf("%d",&s2[i]);
printf("\n");
int s[n+m];
int p=0,q=0,k=0;
while(p<n&&q<m){ //归并
if(s1[p]<s2[q]) s[k++]=s1[p++];
else s[k++]=s2[q++];
}
while(p<n) s[k++]=s1[p++]; //插入s1的剩余元素
while(q<m) s[k++]=s2[q++]; //插入s2的剩余元素
printf("归并:\n");
for(int i=0;i<n+m;i++) printf("%d ",s[i]);
printf("\n");
return 0;
}