Merge Sort is a divide-and-conquer algorithm that was invented by John von Neumann in 1945. It works by recursively splitting the array into halves until each sub-array contains a single element, and then merging those sub-arrays back together in sorted order.
#include<stdio.h>
void mergeSort(int[], int, int);
int main(){
int n, arr[50];
printf("Enter the number of elements: ");
scanf("%d",&n);
printf("Enter %d elements: ",n);
for(int i=0;i<n;i++){
scanf("%d",&arr[i]);
}
mergeSort(arr, 0, n-1);
printf("Sorted array: ");
for(int i=0;i<n;i++){
printf("%d ",arr[i]);
}
return 0;
}
void mergeSort(int arr[], int left, int right){
int mid, i, j, k, temp[50];
if(left<right){
mid = (left+right)/2;
mergeSort(arr, left, mid);
mergeSort(arr, mid+1, right);
i = left;
j = mid+1;
k = left;
while(i<=mid && j<=right){
if(arr[i]<=arr[j]){
temp[k++] = arr[i++];
}else{
temp[k++] = arr[j++];
}
}
while(i<=mid){
temp[k++] = arr[i++];
}
while(j<=right){
temp[k++] = arr[j++];
}
for(i=left;i<=right;i++){
arr[i] = temp[i];
}
}
}
Sample Input and Output:
Enter the number of elements: 7
Enter 7 elements: 6 3 12 9 15 21 18
Sorted array: 3 6 9 12 15 18 21
Enter the number of elements: 7
Enter 7 elements: 6 3 12 9 15 21 18
Sorted array: 3 6 9 12 15 18 21