非递减有序排列C语言,非递减有序顺序表的排序

由于编者水平有限,如有错误,请多多包涵。

/*

File name: Example.cpp

Description: 非递减有序线性表LA, 非递减有序线性表LB, 要求排序后存放在LC中,且LC元素仍然为非递减有序排列

Author: Yang_Jiang

Date: 2018年10月12日

Compiler:Visual Studio 2008

*/

# include

# include

# define ElemType int //自定义数据类型

# define MaxSizeLA 15 //LA表长度

# define MaxSizeLB 20 //LB表长度

//定义结构体

typedef struct

{

// ElemType elem1[MaxSize]; 可以直接开辟空间,也可以使用动态内存分配 一块连续的内存空间来使用

ElemType* elem;

int length; //表示该顺序表的实际长度

}SqList,*PSqList;

//函数声明

void inti_list(PSqList , int ); //初始化线性表

void insertLA(PSqList); //向LA表插入非递减有序元素

void insertLB(PSqList); //向LA表插入非递减有序元素

void sort_list(PSqList LA, PSqList LB, PSqList LC); //排序后全部存放到LC表

int main()

{

//非递减有序 顺序表LA , LB

SqList LA;

SqList LB;

//非递减有序LC 排序完成后也是非递减有序顺序表

SqList LC;

//初始化顺序表LA , LB

inti_list(&LA,MaxSizeLA);

inti_list(&LB,MaxSizeLB);

inti_list(&LC,MaxSizeLA + MaxSizeLB);

//向LA LB 插入 非递减有序 数据

insertLA(&LA);

insertLB(&LB);

//打印LA表数据

for(int i=0; i< MaxSizeLA; i++)

{

printf("%d \t ", LA.elem[i]);

}

printf("\n");

//打印LB表数据

for(int i=0; i< MaxSizeLB; i++)

{

printf("%d \t ", LB.elem[i]);

}

//排序

sort_list(&LA,&LB,&LC);

printf("\n排序后:\n");

//打印LC表数据

for(int i=0; i < LC.length ; i++)

{

printf("%d \t ", LC.elem[i]);

}

return 0;

}

/*

函数名:inti_list();

参数:PSqList L , int length

初始条件:MaxSize已经给定

功能:初始化线性表,长度为length

返回值:暂无

*/

void inti_list(PSqList L , int length)

{

L->elem = (ElemType *) malloc(sizeof (ElemType) * length); //开辟一块连续的空间

if( !L->elem )

{

exit(-1); //动态内存空间开辟失败

}

else

{

L->length = 0; //线性表实际长度为0

}

}

/*

函数名:insertLA();

参数:PSqList L

初始条件:线性表已经初始化

功能:向线性表LA添加非递减有序元素

返回值:暂无

*/

void insertLA(PSqList LA)

{

int k = 1;

for(int i=0; i< MaxSizeLA; i++)

{

LA->elem[i] = k + i;

LA->length ++;

}

}

/*

函数名:insertLB();

参数:PSqList L

初始条件:线性表已经初始化

功能:向线性表LB添加非递减有序元素

返回值:暂无

*/

void insertLB(PSqList LB)

{

int k = 2;

for(int i=0; i< MaxSizeLB; i++)

{

LB->elem[i] = k + i;

LB->length ++;

}

}

/*

函数名:sort_list();

参数:PSqList LA, PSqList LB, PSqList LC

初始条件:线性表LA,LB已经按非递减有序排列 且LC已经初始化

功能:非递减有序存放到LC表

返回值:暂无

*/

void sort_list(PSqList LA, PSqList LB, PSqList LC)

{

int a = 0; //LA下标

int b = 0;//LB下标

int c = 0;// LC下标

while( a < LA->length && b < LB->length)

{

if(LA->elem[a] <= LB->elem[b])

{

LC->elem[c] = LA->elem[a];

c++;

a++;

LC->length++;

}

else

{

LC->elem[c] = LB->elem[b];

c++;

b++;

LC->length ++;

}

}

while( a < LA->length)

{

LC->elem[c] = LA->elem[a];

c++;

a++;

LC->length++;

}

while( b < LB->length)

{

LC->elem[c] = LB->elem[b];

b++;

c++;

LC->length++;

}

}

/*

总结

为了更加理解指针和动态内存分配 没有使用 ElemType elem1[MaxSize] 的写法

排序要注意 排列好后要判断LA和LB 还有没有数据存在 有数据存在直接存入LC 因为此时数据已经是排列好的

如果LA LB ! (非递减有序线) 可以通过冒泡排序先对LA LB排序好

然后在进行 非递减有序线 排序

顺序表的缺点: 插入和删除需要耗费大量的时间 代价太大了。

长度固定,需要预先分配存储空间,可能造成大量空间浪费或空间不足的情况。

本程序在Visual Studio 2008编译通过,文件是.cpp文件,代码的写法有点不规范,既有C语言

语法也包含了C++语法 望海涵。

*/

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值