2.1.5 Median of Two Sorted Arrays

来源:互联网 发布:360杀毒软件for mac 编辑:程序博客网 时间:2024/06/13 04:09

问题

这里写图片描述

答案

#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;}

结果

这里写图片描述

0 0