您的位置:首页 > 其它

2.1.5 Median of Two Sorted Arrays

2015-12-12 00:41 309 查看

问题



答案

#include <stdio.h>

//使用线性搜索,算法时间复杂度为O(m+n)
int get_median(int *a, int la, int *b, int lb)
{
int i, j;
int median = 0;             //中值数
int mid = (la + lb) / 2;    //两个数组长度和的中间下表
int odd = !((la + lb) % 2); //两个数组长度和为偶数标志

if (!odd)
mid++;
for (i = j = 0; (i + j + 0) < mid; ) {
if (a[i] < b[j]) {
median = a[i++];
} else if (a[i] > b[j]) {
median = b[j++];
}
}
if (odd) {
if (i >= la)
median = (median + b[j]) / 2;
else if (j >= lb)
median = (median + a[i]) / 2;
else
median = (median + (a[i]<b[j]?a[i]:b[j])) / 2;
}
return median;
}

int main(void)
{
int a[100], b[100];
int la, lb;
int i;
int median = 0;

i = 0;
printf("input array 1, end with -1:\n");
do {
scanf("%d", &a[i]);
} while (a[i++] != -1);
la = --i;
i = 0;
printf("input array 2, end with -1:\n");
do {
scanf("%d", &b[i]);
} while (b[i++] != -1);
lb = --i;

median = get_median(a, la, b, lb);
printf("median is %d\n", median);

return 0;
}


结果

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: