求两个等长有序数组并集的中位数数据结构C语言
时间: 2023-11-12 09:13:37 浏览: 65
可以使用归并排序的思想,将两个有序数组合并成一个有序数组,然后再根据数组长度的奇偶性来求中位数。
代码实现如下:
```c
#include <stdio.h>
int findMedian(int arr1[], int arr2[], int n)
{
int i = 0, j = 0, count;
int m1 = -1, m2 = -1;
for (count = 0; count <= n; count++) {
if (i == n) {
m1 = m2;
m2 = arr2[0];
break;
}
if (j == n) {
m1 = m2;
m2 = arr1[0];
break;
}
if (arr1[i] <= arr2[j]) {
m1 = m2;
m2 = arr1[i];
i++;
}
else {
m1 = m2;
m2 = arr2[j];
j++;
}
}
if ((n % 2) == 0)
return (m1 + m2) / 2;
else
return m2;
}
int main()
{
int arr1[] = { 1, 3, 5, 7, 9 };
int arr2[] = { 2, 4, 6, 8, 10 };
int n = sizeof(arr1) / sizeof(arr1[0]);
printf("Median is %d", findMedian(arr1, arr2, n));
return 0;
}
```
该程序的输出为:
```
Median is 5
```
这个程序的时间复杂度为O(n),其中n为数组的长度。
阅读全文