#include <stdio.h>
#include <stdlib.h>
#define LIST_INIT_SIZE 50
typedef int ElemType;
typedef struct
{
ElemType *elem;
int length;
int listsize;
}SqList;
void CreateList(SqList &L) //创建顺序表
{
int num,i;
scanf("%d",&num);
L.elem = (ElemType *)malloc(LIST_INIT_SIZE*sizeof(ElemType));
if(!L.elem)
{
printf("创建失败,程序退出!");
system("pause");
exit(!0);
}
L.length = 0;
L.listsize = LIST_INIT_SIZE;
for(i = 1;i <= num;i++)
{
printf("请输入第%d个元素:",i);
scanf("%d",&L.elem[i - 1]);
}
L.length = num;
}
void Sort(SqList &L) //递增排序
{
int i,j,temp;
if(!L.elem && !L.length)
{
printf("\n顺序表不存在或者为空,操作失败,程序退出!");
system("pause");
exit(!0);
}
for(i = 1;i <= L.length - 1;i++)
{
for(j = i; j <= L.length - 1;j++)
{
if(L.elem[i - 1] > L.elem[j])
//若需递减则把 if(L.elem[i - 1] > L.elem[j]) 改成 if(L.elem[i - 1] < L.elem[j]) 即可
{
temp = L.elem[i - 1];
L.elem[i - 1] = L.elem[j];
L.elem[j] =temp;
}
}
}
}
void Traverse(SqList L) //遍历
{
int i;
if(!L.elem || !L.length)
{
printf("\n顺序表不存在或者顺序表为空,操作失败,程序退出!");
system("pause");
exit(!0);
}
for(i = 1;i <= L.length ;i++)
printf("%4d",L.elem[i - 1]);
printf("\n");
}
SqList MergeList(SqList La,SqList Lb) //递增归并
{
SqList Lc;
ElemType *pa,*pb,*pc;
Lc.elem = (ElemType *)malloc((La.length + Lb.length)*sizeof(ElemType));
if(!Lc.elem)
{
printf("\n创建顺序表失败,程序退出!");
system("pause");
exit(!0);
}
Lc.listsize = La.length + Lb.length;
pa = La.elem;
pb = Lb.elem;
pc = Lc.elem;
while(pa <= La.elem + La.length - 1 && pb <= Lb.elem + Lb.length - 1)
if(*pa <= *pb)
//需递减则把 if(*pa <= *pb) 改成 if(*pa >= *pb) 即可
*pc++ = *pa++;
else
*pc++ = *pb++;
while(pa <= La.elem + La.length - 1)
*pc++ = *pa++;
while(pb <= Lb.elem + Lb.length - 1)
*pc++ = *pb++;
Lc.length = La.length + Lb.length;
return Lc;
}
int main()
{
SqList La,Lb,Lc;
printf("请输入顺序表La的长度:");
CreateList(La);
printf("\n顺序表La:");
Traverse(La);
printf("\n请输入顺序表Lb的长度:");
CreateList(Lb);
printf("\n顺序表Lb:");
Traverse(Lb);
printf("\n顺序表La和Lb都非有序表,现对两个表排序,排序结果如下:");
Sort(La);
Sort(Lb);
printf("\n排序表La:");
Traverse(La);
printf("排序表Lb:");
Traverse(Lb);
printf("\n顺序表La和Lb归并结果为:");
MergeList(La,Lb);
Lc = MergeList(La,Lb);
printf("\n归并表Lc:");
Traverse(Lc);
printf("\n\n");
system("pause");
}
C语言—顺序表排序递增及归并
猜你喜欢
转载自blog.csdn.net/Long_UP/article/details/121766851
今日推荐
周排行