#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int count=0;
void merge(int a[], int low,int mid,int high)
{
int i,j,k,c[10000];
i=low, j=mid+1, k=0;
while((i<=mid) && (j<=high))
{
count++;
//choose the least element and store in Temporary array 'C'
if(a[i]<a[j])
c[k++]=a[i++];
else
c[k++]=a[j++];
}
//Copy the remaining array elements from any one of sub-array
while(i<=mid)
c[k++]=a[i++];
while(j<=high)
c[k++]=a[j++];
for(i=low,j=0;j<k;i++, j++)
a[i]=c[j];
}
void merge_sort(int a[], int low, int high)
{
int mid;
if(low < high)
{
//Divide the given array into 2 parts
mid=(low+high)/2;
merge_sort(a,low,mid);
merge_sort(a,mid+1,high);
merge(a,low,mid,high);
}
}
int main()
{
int a[10000],n,i;
printf("Enter the number of elements in an array:");
scanf("%d",&n);
printf("All the elements:");
srand(time(0));
for(i=0;i<n;i++)
{
a[i]=rand();
printf("%d ",a[i]);
}
merge_sort(a,0,n-1);
printf("\nAfter sorting\n");
for(i=0;i<n;i++)
printf("%d ", a[i]);
printf("\nNumber of basic operations = %d\n",count);
}
I2luY2x1ZGU8c3RkaW8uaD4KI2luY2x1ZGU8c3RkbGliLmg+CiNpbmNsdWRlPHRpbWUuaD4KaW50IGNvdW50PTA7CnZvaWQgbWVyZ2UoaW50IGFbXSwgaW50IGxvdyxpbnQgbWlkLGludCBoaWdoKQp7CmludCBpLGosayxjWzEwMDAwXTsKaT1sb3csIGo9bWlkKzEsIGs9MDsKd2hpbGUoKGk8PW1pZCkgJiYgKGo8PWhpZ2gpKQp7CmNvdW50Kys7Ci8vY2hvb3NlIHRoZSBsZWFzdCBlbGVtZW50IGFuZCBzdG9yZSBpbiBUZW1wb3JhcnkgYXJyYXkgJ0MnCmlmKGFbaV08YVtqXSkKY1trKytdPWFbaSsrXTsKZWxzZQpjW2srK109YVtqKytdOwp9Ci8vQ29weSB0aGUgcmVtYWluaW5nIGFycmF5IGVsZW1lbnRzIGZyb20gYW55IG9uZSBvZiBzdWItYXJyYXkKd2hpbGUoaTw9bWlkKQpjW2srK109YVtpKytdOwp3aGlsZShqPD1oaWdoKQpjW2srK109YVtqKytdOwpmb3IoaT1sb3csaj0wO2o8aztpKyssIGorKykKYVtpXT1jW2pdOwp9CnZvaWQgbWVyZ2Vfc29ydChpbnQgYVtdLCBpbnQgbG93LCBpbnQgaGlnaCkKewppbnQgbWlkOwppZihsb3cgPCBoaWdoKQp7Ci8vRGl2aWRlIHRoZSBnaXZlbiBhcnJheSBpbnRvIDIgcGFydHMKbWlkPShsb3craGlnaCkvMjsKbWVyZ2Vfc29ydChhLGxvdyxtaWQpOwptZXJnZV9zb3J0KGEsbWlkKzEsaGlnaCk7Cm1lcmdlKGEsbG93LG1pZCxoaWdoKTsKfQp9CmludCBtYWluKCkKCnsKaW50IGFbMTAwMDBdLG4saTsKcHJpbnRmKCJFbnRlciB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIGFuIGFycmF5OiIpOwpzY2FuZigiJWQiLCZuKTsKcHJpbnRmKCJBbGwgdGhlIGVsZW1lbnRzOiIpOwpzcmFuZCh0aW1lKDApKTsKZm9yKGk9MDtpPG47aSsrKQp7CmFbaV09cmFuZCgpOwpwcmludGYoIiVkICIsYVtpXSk7Cn0KbWVyZ2Vfc29ydChhLDAsbi0xKTsKcHJpbnRmKCJcbkFmdGVyIHNvcnRpbmdcbiIpOwpmb3IoaT0wO2k8bjtpKyspCnByaW50ZigiJWQgIiwgYVtpXSk7CnByaW50ZigiXG5OdW1iZXIgb2YgYmFzaWMgb3BlcmF0aW9ucyA9ICVkXG4iLGNvdW50KTsKfQ==