#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[ 100 ] ,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 ( "\n After sorting\n " ) ;
for ( i= 0 ; i< n; i++ )
printf ( "%d " , a[ i] ) ;
printf ( "\n Number of basic operations = %d\n " ,count) ;
}
I2luY2x1ZGU8c3RkaW8uaD4KI2luY2x1ZGU8c3RkbGliLmg+CiNpbmNsdWRlPHRpbWUuaD4KaW50IGNvdW50PTA7CnZvaWQgbWVyZ2UoaW50IGFbXSwgaW50IGxvdyxpbnQgbWlkLGludCBoaWdoKQp7CmludCBpLGosayxjWzEwMDAwXTsKaT1sb3csIGo9bWlkKzEsIGs9MDsKd2hpbGUoKGk8PW1pZCkgJiYgKGo8PWhpZ2gpKQp7CmNvdW50Kys7Ci8vY2hvb3NlIHRoZSBsZWFzdCBlbGVtZW50IGFuZCBzdG9yZSBpbiBUZW1wb3JhcnkgYXJyYXkgJ0MnCmlmKGFbaV08YVtqXSkKY1trKytdPWFbaSsrXTsKZWxzZQpjW2srK109YVtqKytdOwp9Ci8vQ29weSB0aGUgcmVtYWluaW5nIGFycmF5IGVsZW1lbnRzIGZyb20gYW55IG9uZSBvZiBzdWItYXJyYXkKd2hpbGUoaTw9bWlkKQpjW2srK109YVtpKytdOwp3aGlsZShqPD1oaWdoKQpjW2srK109YVtqKytdOwpmb3IoaT1sb3csaj0wO2o8aztpKyssIGorKykKYVtpXT1jW2pdOwp9CnZvaWQgbWVyZ2Vfc29ydChpbnQgYVtdLCBpbnQgbG93LCBpbnQgaGlnaCkKewppbnQgbWlkOwppZihsb3cgPCBoaWdoKQp7Ci8vRGl2aWRlIHRoZSBnaXZlbiBhcnJheSBpbnRvIDIgcGFydHMKbWlkPShsb3craGlnaCkvMjsKbWVyZ2Vfc29ydChhLGxvdyxtaWQpOwptZXJnZV9zb3J0KGEsbWlkKzEsaGlnaCk7Cm1lcmdlKGEsbG93LG1pZCxoaWdoKTsKfQp9CmludCBtYWluKCkKCnsKaW50IGFbMTAwXSxuLGk7CnByaW50ZigiRW50ZXIgdGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiBhbiBhcnJheToiKTsKc2NhbmYoIiVkIiwmbik7CnByaW50ZigiQWxsIHRoZSBlbGVtZW50czoiKTsKc3JhbmQodGltZSgwKSk7CmZvcihpPTA7aTxuO2krKykKewphW2ldPXJhbmQoKTsKcHJpbnRmKCIlZCAiLGFbaV0pOwp9Cm1lcmdlX3NvcnQoYSwwLG4tMSk7CnByaW50ZigiXG5BZnRlciBzb3J0aW5nXG4iKTsKZm9yKGk9MDtpPG47aSsrKQpwcmludGYoIiVkICIsIGFbaV0pOwpwcmludGYoIlxuTnVtYmVyIG9mIGJhc2ljIG9wZXJhdGlvbnMgPSAlZFxuIixjb3VudCk7Cn0=