How to get the median of two sorted arrays in C++

2 Answers

0 votes
#include <iostream>

#define SIZE 6

double findMedianOfTwoSortedArrays(int arr1[], int size1, int arr2[], int size2) {
    int merged[SIZE] = { 0 };
    int i = 0, j = 0, k = 0;

    while (i < size1 && j < size2) {
        if (arr1[i] < arr2[j])
            merged[k++] = arr1[i++];
        else
            merged[k++] = arr2[j++];
    }

    while (i < size1)
        merged[k++] = arr1[i++];

    while (j < size2)
        merged[k++] = arr2[j++];

    int total = size1 + size2;
    double median;
    if (total % 2 == 0) {
        int mid1 = merged[(total - 1) / 2];
        int mid2 = merged[total / 2];
        median = (double)(mid1 + mid2) / 2.0;
    }
    else {
        median = (double)merged[total / 2];
    }

    return median;
}

int main() {
    int arr1[] = { 1, 3, 5 };
    int size1 = sizeof(arr1) / sizeof(arr1[0]);

    int arr2[] = { 2, 4, 6 };
    int size2 = sizeof(arr2) / sizeof(arr2[0]);

    double median = findMedianOfTwoSortedArrays(arr1, size1, arr2, size2);
    
    std::cout << "Median: " << median;
}





/*
run:

Median: 3.5

*/

 



answered Jul 19, 2023 by avibootz
0 votes
#include <iostream>
#include <vector>

double findMedianOfTwoSortedArrays(std::vector<int> vec1, std::vector<int> vec2) {
	int i = 0, j = 0;
	int mid1 = -1, mid2 = -1;
	int size1 = vec1.size();
	int size2 = vec2.size();

	if ((size2 + size1) % 2 == 1) {
		for (int k = 0; k <= (size1 + size2) / 2; k++) {
			if (i != size1 && j != size2) {
				mid1 = (vec1[i] > vec2[j]) ? vec2[j++] : vec1[i++];
			}
			else if (i < size1) {
				mid1 = vec1[i++];
			}
			else {
				mid1 = vec2[j++];
			}
		}
		return mid1;
	}
	else {
		for (int k = 0; k <= (size1 + size2) / 2; k++) {
			mid2 = mid1;
			if (i != size1 && j != size2) {
				mid1 = (vec1[i] > vec2[j]) ? vec2[j++] : vec1[i++];
			}
			else if (i < size1) {
				mid1 = vec1[i++];
			}
			else {
				mid1 = vec2[j++];
			}
		}
		return static_cast<double>(mid1 + mid2) / 2;
	}
}

int main()
{
	std::vector<int> vec1 = {1, 3, 5};
	
	std::vector<int> vec2 = {2, 4, 6};

	double median = findMedianOfTwoSortedArrays(vec1, vec2);

	std::cout << "Median: " << median;
}




/*
run:

Median: 3.5

*/

 



answered Jul 19, 2023 by avibootz
...