两有序顺序表合并后的中位数

定义一个顺序表

typedef struct 
{
	int *p;
	int length;
 } list;

初始化顺序表

status csh(list &L)
{
	L.p=new status(MAXSIZE);
	if(!L.p) 
	exit(OVERFLOW);
	
	L.length=0;
	return ok;
}

两有序顺序表合并后的中位数函数,此为两表长相同均为n的顺序表,表长若不同,类推即可。

status zws(list &a,list &b,status n)			 
{
	int i=0,c,q=0;
	while(i+q<n)
	{
		if(*a.p>*b.p)
		{
			c=*b.p;
			q++;
			if(q<n)
			b.p++;
		}
		else
		{
			c=*a.p;
			i++;
			if(i<n)
			a.p++;
		 } 
	}
	printf("两有序顺序表合并后的中位数是:%d",c);
	 
	return ok;
}

分析

	表A  1 2 3 4 5 6		 
	表B  2 4 5 6 8 9

A1 B1 比较将小值赋给一个参量(作为可能中位数),同时用一个变量来记录此值在哪个位置,指向小值的指针指向相同顺序表中的下一个元素, 然后A2 B1比较以此类推 直到到中间位置。

注意点
1.当记录到中间位置时要跳出,所以i+q要为中间值时跳出,所以while 条件为 i+q<n。
2.指针若已指向最后一位 则不应再指向下一位 设一个条件语句来限制,从而达到目标。
3.一定要为有序顺序表。

总结
两顺序表一对一从前往后进行比较小值赋给一变量(记录为可能中间值)相当于丢出去,此表中后面的值再往前推填补这个值再与另一表中的值进行比较。取一变量记录可能中间值的位置,到达中间位置结束,变量记录值即为中间值。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值