求两个递增数列的中间值
本题来自苏州大学872考研2015年真题:设L1和L2是两个存放整型元素的递增有序顺序表,设计时间性能和空间性能尽量高效的算法,查找出L1和L2中所有元素按大小排列的中间值。
算法思想:本题没什么好说的,本质上就是合并两个线性表,也有点归并排序的感觉。两个指针分别指向两个序列的首项,谁小就把谁拿出来,当找到了mid的时候,算法结束。若任一序列遍历完毕,则另一序列向后遍历未遍历完的mid即可。
这个算法是正常思路就能想到的算法,也属于比较常规的方法了,我本来还以为有什么高级的方法,结果自己想不出来,看答案也是这个,就直接拿过来放上了。欢迎讨论,若有更好的方法,希望大佬不吝赐教。
下附代码:
int find_mid(int a[],int b[]){
int A = length(a);
int B = length(b);
int i = 0,j = 0;
int mid_value;
mid = (A+B)/2;
while(mid>=0&&i<A&&j<B){
if(a[i]<=b[j]) mid_value = a[i++];
else mid_value = b[j++];
mid--;
}
while(mid>=0&&j<B){
mid--;
mid_value = b[j++];
}
while(mid>=0&&i<A){
mid--;
mid_value = a[i++];
}
return mid_value;
}