两个已经排好序的数组,找中位数.docx

上传人:小飞机 文档编号:3210918 上传时间:2023-03-11 格式:DOCX 页数:2 大小:36.98KB
返回 下载 相关 举报
两个已经排好序的数组,找中位数.docx_第1页
第1页 / 共2页
两个已经排好序的数组,找中位数.docx_第2页
第2页 / 共2页
亲,该文档总共2页,全部预览完了,如果喜欢就下载吧!
资源描述

《两个已经排好序的数组,找中位数.docx》由会员分享,可在线阅读,更多相关《两个已经排好序的数组,找中位数.docx(2页珍藏版)》请在三一办公上搜索。

1、两个已经排好序的数组,找中位数两个已经排好序的数组,找中位数 题目:现在有两个排好序的整数数组,aN和bN,要求写一个函数,功能为返回两个数组中第N大数和第N+1大数的中间值,即求解两者的和除以2。 函数原型:doublegetMedian( int a, int b ); 下面,我们先来分析一个类似的问题,假设a和b都是升序的,分别有n1和n2个元素,求两个数组合并后第k大元素值。 分别取两个数组中间索引的数,ax和by,比较两个数的大小: if( ax = ay ) 如果k x+y+1,则可以判断出a数组的前半部分元素都不符合条件,减少a一半的搜索规模。 该算法利用了递归的思想,结束条件是

2、: a中元素排除出去,则选择b中得第k大元素; b中元素全部排除,选择a中第k大元素。 实现的代码如下: #include #include #define N 5 int aN = 1, 2, 3, 4, 5; int bN = 4, 5, 6, 7, 8; /获取数组a中从s1到n1个元素 /数组b中s2到n2个元素,合并后的第k大元素 intgetMedian( int s1, int n1, int s2, int n2, int k ) /x和y分别记录中间值的索引 int x, y; x = (s1 + n1) / 2; /记录a的中位数索引 y = (s2 + n2) / 2;

3、/记录b的中位数索引 if( s1 n1 ) return bs2+k-1; if( s2 n2 ) return as1+k-1; if( ax = by ) if( k = (x-s1) + (y-s2) + 1 ) returngetMedian( s1, n1, s2, y-1, k ); else returngetMedian( x+1, n1, s2, n2, k-(x-s1)-1 ); else if( k = (x-s1)+(y-s2)+1 ) returngetMedian( s1, x-1, s2, n2, k ); else returngetMedian( s1, n1, y+1, n2, k-(y-s2)-1 ); return0; int main inti; i = getMedian(0, 4, 0, 4, 5); printf( %dn, i ); return0;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号