Question: Given a sequence of integers, find the median of the integers?
Input: arr [] = {15, 23, 4, 16, 8, 42}. Find median.
Output: 15
Since the question does not specify anything we cannot assume that the given array is a sorted one. The definition of median is the (n/2)th element of a sorted sequence of integers.
This definition makes our approach simpler. All we need to do is sort the integers and then return the (n/2)th element.
Here is the code for above approach. I use quick sort to sort the array.
#include<stdio.h>
void swap(int *i, int *j) {
int temp = *i;
*i = *j;
*j = temp;
}
int partition(int arr[], int start, int end) {
int pivot = arr[end];
int i = start, j = end-1;
while(i<=j) {
while(arr[i]<pivot) i++;
while(arr[j]>pivot) j--;
if(i<=j) {
swap(&arr[i],&arr[j]);
i++;
j--;
}
}
swap(&arr[i],&arr[end]);
return i;
}
void performQuickSort(int arr[], int start, int end) {
if(start<end) {
int p = partition(arr, start, end);
performQuickSort(arr, start, p-1);
performQuickSort(arr, p+1, end);
}
}
void quickSort(int arr[], int size) {
performQuickSort(arr, 0, size-1);
}
// driver program to find median
int main(void)
{
int i;
int arr[6] = {15, 23, 4, 16, 8, 42};
int size = 6;
quickSort(arr,size);
printf("Median:- %d",arr[size/2]);
return 0;
}
Time Complexity:- O (n*log (n)) due to quick sort.