2022.10.03怎么说呢,连着上一条应该昨天发的,结果上限10条。
任务描述
本关任务:一个长度为L(L≥1)的升序序列S,处在第 ⌈L/2⌉个位置的数称为S的中位数。
例如:若序列S1=(11,13,15,17,19),则S1的中位数是15。
两个序列的中位数是含它们所有元素的升序序列的中位数。例如,若S2=(2,4,6,8,20),则S1和S2的中位数是11。
现有两个等长的升序序列A和B,试设计一个在时间和空间两方面都尽可能高效的算法,找出两个序列A和B的中位数。
编程要求
根据提示,在右侧编辑器补充代码,完成函数ElemType find_median(SqList *A, SqList *B),该函数功能为求两个等长的有序顺序表的中位数并返回。
测试说明
平台会对你编写的代码进行测试:
测试输入:
5
11 13 15 17 19
2 4 6 8 20
预期输出:
11
开始你的任务吧,祝你成功!
C++代码
#include "sqlist.h"
/**
* 求两个等长的有序顺序表的中位数。
*/
ElemType find_median(SqList *A, SqList *B)
{
//请在下面编写代码
/******************Begin******************/
int i=0,j=0,k=0;
while(i<A->length && j<B->length)
{
k++;
if(A->data[i]<B->data[j])
{
if(k==A->length)
return A->data[i];
i++;
}
else
{
if(k==B->length)
return B->data[j];
j++;
}
}
/*******************End*******************/
}
ElemType a[MaxSize];
ElemType b[MaxSize];
int main()
{
SqList *L1, *L2;
int n;
scanf("%d", &n);
for (int i = 0; i < n; i++)scanf("%d", &a[i]);
for (int i = 0; i < n; i++)scanf("%d", &b[i]);
CreateList(L1, a, n);
CreateList(L2, b, n);
printf("L1,L2的中位数:%d\n", find_median(L1, L2));
return 0;
}