题目要求:创建顺序表A和B,其元素均按从小到大的顺序排列,编写一个算法将它们合成一个顺序表C,要求C的元素也是升序排序。
#include<stdio.h>
#define MAXSIZE 100
typedef struct{
int data[MAXSIZE];
int length;
}SeqList;
void Init(SeqList* m)
{
printf("输入长度:\n");
scanf("%d",&m->length);
printf("按顺序输入元素:\n");
for(int i=0;i<m->length;i++)
scanf("%d",&m->data[i]);
}
void merge(SeqList *a,SeqList *b,SeqList *c)
{
int i,j,k;
i=0;
j=0;
k=0;
while(i<a->length&&j<b->length)
{
if(a->data[i]<=b->data[j]){
c->data[k]=a->data[i];
i++;}
else{
c->data[k]=b->data[j];
j++;
}
k++;
}
while(i<a->length){
c->data[k]=a->data[i];
i++;
k++;
}
while(j<b->length)
{
c->data[k]=b->data[j];
j++;
k++;
}
c->length=k;
}
int main()
{
SeqList A,B,C;
Init(&A);
Init(&B);
C.length=0;
merge(&A,&B,&C);
for(int i=0;i<C.length;i++)
printf("%d ",C.data[i]);
return 0;
}
算法思路:依次扫描A和B的元素,比较当前元素的值,将较小的元素赋值给C,直到如此一个线性表扫描完毕 ,然后将未处理完的一个顺序表中的余下部分元素连在表C的后面即可。表C的容量要足够容纳A,B两个线性表中的所有元素。