#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++];
} elseif (a[i] > b[j]) {
median = b[j++];
}
}
if (odd) {
if (i >= la)
median = (median + b[j]) / 2;
elseif (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);
return0;
}