问题描述
已知两个等长度且均有序的数组a与b,它的长度为N,请计算出这两个数组所有元素的中位数.
易错细节
我刚开始采取的策略是:中位数靠左处理.这句话的含义就是:如果是偶数个,则去中间两个元素的前一个.
例如: a数组 {1 2 3 4} 和 b数组 {3 4 5 6}
在这样的处理思想下,由于a 数组中位数为2, b数组中位数为4, 比较中位数,因为2<4,故取a数组后部分和b数组前部分,此时a数组取{2 3 4}, b数组取{3 4},造成了两个数组不等长.因此这个想法在遇到偶数个元素的时候是有缺陷的.
设计思路
由于上面的错误,我改变想法.如果数组元素为奇数个,很明显其中位数为最中间元素;如果数组元素为偶数个,我们认为其中位数为中间两个元素的平均值.
关键实现
核心代码即Process函数,其中还涉及到两个有序数组合并排序的问题.
源代码
/*************************************************************************
** > Name : test.cpp
** > Author: LiYingXiao (Sweethreart502)
** > Mail : liyingxiao502@gmail.com
** > Blog : http://blog.csdn.net/u013166575
** > Created Time: 2015年12月02日 星期三 12时43分12秒
************************************************************************/
#include <iostream>
// 处理函数
double Process ( int a[] , int b[] , int n )
{
// a数组左右下标
int la = 0 , ra = n - 1 ;
// b数组左右下标
int lb = 0 , rb = n - 1 ;