#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:" ) ; for ( i= 0 ; i< n; i++ )
{
}
merge_sort( a, 0 , n- 1 ) ;
for ( i= 0 ; i< n; i++ )
printf ( "\n Number of basic operations = %d\n " , count
) ; }
I2luY2x1ZGU8c3RkaW8uaD4KI2luY2x1ZGU8c3RkbGliLmg+CiNpbmNsdWRlPHRpbWUuaD4KaW50IGNvdW50PTA7CnZvaWQgbWVyZ2UoaW50IGFbXSwgaW50IGxvdyxpbnQgbWlkLGludCBoaWdoKQp7CmludCBpLGosayxjWzEwMDAwXTsKaT1sb3csIGo9bWlkKzEsIGs9MDsKd2hpbGUoKGk8PW1pZCkgJiYgKGo8PWhpZ2gpKQp7CmNvdW50Kys7Ci8vY2hvb3NlIHRoZSBsZWFzdCBlbGVtZW50IGFuZCBzdG9yZSBpbiBUZW1wb3JhcnkgYXJyYXkgJ0MnCmlmKGFbaV08YVtqXSkKY1trKytdPWFbaSsrXTsKZWxzZQpjW2srK109YVtqKytdOwp9Ci8vQ29weSB0aGUgcmVtYWluaW5nIGFycmF5IGVsZW1lbnRzIGZyb20gYW55IG9uZSBvZiBzdWItYXJyYXkKd2hpbGUoaTw9bWlkKQpjW2srK109YVtpKytdOwp3aGlsZShqPD1oaWdoKQpjW2srK109YVtqKytdOwpmb3IoaT1sb3csaj0wO2o8aztpKyssIGorKykKYVtpXT1jW2pdOwp9CnZvaWQgbWVyZ2Vfc29ydChpbnQgYVtdLCBpbnQgbG93LCBpbnQgaGlnaCkKewppbnQgbWlkOwppZihsb3cgPCBoaWdoKQp7Ci8vRGl2aWRlIHRoZSBnaXZlbiBhcnJheSBpbnRvIDIgcGFydHMKbWlkPShsb3craGlnaCkvMjsKbWVyZ2Vfc29ydChhLGxvdyxtaWQpOwptZXJnZV9zb3J0KGEsbWlkKzEsaGlnaCk7Cm1lcmdlKGEsbG93LG1pZCxoaWdoKTsKfQp9CmludCBtYWluKCkKCnsKaW50IGFbMTAwMDBdLG4saTsKcHJpbnRmKCJFbnRlciB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIGFuIGFycmF5OiIpOwpzY2FuZigiJWQiLCZuKTsKcHJpbnRmKCJBbGwgdGhlIGVsZW1lbnRzOiIpOwpzcmFuZCh0aW1lKDApKTsKZm9yKGk9MDtpPG47aSsrKQp7CmFbaV09cmFuZCgpOwpwcmludGYoIiVkICIsYVtpXSk7Cn0KbWVyZ2Vfc29ydChhLDAsbi0xKTsKcHJpbnRmKCJcbkFmdGVyIHNvcnRpbmdcbiIpOwpmb3IoaT0wO2k8bjtpKyspCnByaW50ZigiJWQgIiwgYVtpXSk7CnByaW50ZigiXG5OdW1iZXIgb2YgYmFzaWMgb3BlcmF0aW9ucyA9ICVkXG4iLGNvdW50KTsKfQ==