线性表基础知识(二)

 归并两个有序的线性表LA和LB为一个新的有序线性表LC

算法思想


1.初始化:置LC为空表,设置变量i,j,初始值为1,分别指向LA和LB的第一个DE,k表示LC的长度,初值为0.
2.当i<=LENGTH(LA) AND j<=LENGTH(LB)时,
判断:若i所指的元素<=j所指的元素,则将i所指的元素插入在LC的k+1前,并且i,k的值分别加1;
否则,将j所指的元素插入在LC的k+1前,并且j,k的值分别加1
3.重复2直到某个表的元素插入完毕
4.将未插入完的表的余下的元素,依次插入在LC后

算法实现

PROC merge_list(LA,LB;linear_lis; VAR LC;Linear_list);
{LA和LB中元素依非递减有序排列,归并得到的LC中的元素仍依值非递减有序排列}
INITIATE (LC);i:=1;j:=1; k:=0;{初始化}
WHILE(i<=LENGTH(LA))AND (j<=LENGTH(LB))DO
  IF GET(LA,i)<=GET(LB,J)
  THEN [INSERT(LC,k+1,GET(LA,i));k:=k+1;i:=i+1]
  ELSE [INSERT(LC,k+1,GET(LB,j));k:=k+1;j:=j+1];
WHILE i<=LENGTH(LA)DO
  [INSERT(LC,k+1,GET(LA,I));k:=k+1;i:=i+1];
WHILE j<=LENGTH(LB)DO
  [INSERT(LC,k+1,GET(LB,j));k:=k+1;j:=j+1]
ENDP;{merge_list}


ENDP:表示算法结束

PROC 用过程的表现方式

算法分析


该算法中包含了三个WHILE语句,其中,第一个处理了某一张表的全部元素和另一张表的部分元素;后两个WHILE循环只可能有一个执行,用来完成将未归并到LC中的余下部分元素插入到LC中。"插入"是估量归并算法时间复杂度的基本操作,其语句频度为:
LENGTH(LA)+LENGTH(LB)
该算法的时间复杂度为:
O(LENGTH(LA)+LENGTH(LB)),若LA和LB的元素个数为同数量级n,则该算法的时间复杂度为O(n)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值