算法 -- 求两个等长数组的中位数

这篇博客探讨了如何计算两个等长度且有序的数组的中位数。作者指出,仅取较小数组的后半部分和较大数组的前半部分会导致错误,尤其在元素数量为偶数时。解决方案是,当元素总数为奇数时,中位数是中间元素;为偶数时,是中间两个元素的平均值。文章重点在于Process函数,该函数涉及两个有序数组的合并和排序。
摘要由CSDN通过智能技术生成

问题描述

已知两个等长度且均有序的数组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 ;
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值