您的位置:首页 > 其它

查找两个等长升序线性表的中位数

2016-07-26 17:39 183 查看
一个长度为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,试设计一个在时间和空间两方面都尽可能高效的算法。

思考:如果这些数据已有序排列在一个序列中,则只通过一次下标计算,即可求得中位数。题目中所给的数据分属于两个有序序列,其中位数的位置不能再通过简单计算确定。该题可以有多种思路,例如,将两个有序序列归并为一个有序序列后再求其中位数,即可求解。但题目中要求“设计一个在时间和空间两方面都尽可能高效的算法”,这是解题的关键。显然,仅用归并过程求解不能满足要求。由于要处理的序列是升序序列,所以该题的处理过程也可借鉴对有序表进行2路归并的思想,代码如下:

int M_Search( int A[ ], int B[ ],int n )
i = j = k = 0;
while ( i<n && j<n )
{    k++;
if( A[i] < B[j] )
{     i++;
if( k==n )
returnA[i-1];
}
else
{     j++;
if( k==n )
returnB[j-1];
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: