#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int count = 0 ;
void merge( int a[ ] , int low, int mid, int high)
{
int i = low, j = mid + 1 , k = 0 ;
int c[ 10000 ] ;
while ( i <= mid && j <= high) {
count++; // Count each comparison
if ( a[ i] < a[ j] )
c[ k++ ] = a[ i++ ] ;
else
c[ k++ ] = a[ j++ ] ;
}
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) {
if ( low < high) {
int 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 the array: " ) ;
printf ( "All the elements:\n " ) ; for ( i = 0 ; i < n; i++ ) {
}
merge_sort( a, 0 , n - 1 ) ;
printf ( "\n \n After sorting:\n " ) ; for ( i = 0 ; i < n; i++ )
printf ( "\n \n Number of basic operations = %d\n " , count
) ;
return 0 ;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPHRpbWUuaD4KCmludCBjb3VudCA9IDA7Cgp2b2lkIG1lcmdlKGludCBhW10sIGludCBsb3csIGludCBtaWQsIGludCBoaWdoKQogewogICAgaW50IGkgPSBsb3csIGogPSBtaWQgKyAxLCBrID0gMDsKICAgIGludCBjWzEwMDAwXTsKCiAgICB3aGlsZSAoaSA8PSBtaWQgJiYgaiA8PSBoaWdoKSB7CiAgICAgICAgY291bnQrKzsgIC8vIENvdW50IGVhY2ggY29tcGFyaXNvbgogICAgICAgIGlmIChhW2ldIDwgYVtqXSkKICAgICAgICAgICAgY1trKytdID0gYVtpKytdOwogICAgICAgIGVsc2UKICAgICAgICAgICAgY1trKytdID0gYVtqKytdOwogICAgfQoKICAgIHdoaWxlIChpIDw9IG1pZCkKICAgICAgICBjW2srK10gPSBhW2krK107CiAgICB3aGlsZSAoaiA8PSBoaWdoKQogICAgICAgIGNbaysrXSA9IGFbaisrXTsKCiAgICBmb3IgKGkgPSBsb3csIGogPSAwOyBqIDwgazsgaSsrLCBqKyspCiAgICAgICAgYVtpXSA9IGNbal07Cn0KCnZvaWQgbWVyZ2Vfc29ydChpbnQgYVtdLCBpbnQgbG93LCBpbnQgaGlnaCkgewogICAgaWYgKGxvdyA8IGhpZ2gpIHsKICAgICAgICBpbnQgbWlkID0gKGxvdyArIGhpZ2gpIC8gMjsKICAgICAgICBtZXJnZV9zb3J0KGEsIGxvdywgbWlkKTsKICAgICAgICBtZXJnZV9zb3J0KGEsIG1pZCArIDEsIGhpZ2gpOwogICAgICAgIG1lcmdlKGEsIGxvdywgbWlkLCBoaWdoKTsKICAgIH0KfQoKaW50IG1haW4oKSB7CiAgICBpbnQgYVsxMDAwMF0sIG4sIGk7CgogICAgcHJpbnRmKCJFbnRlciB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSBhcnJheTogIik7CiAgICBzY2FuZigiJWQiLCAmbik7CgogICAgcHJpbnRmKCJBbGwgdGhlIGVsZW1lbnRzOlxuIik7CiAgICBzcmFuZCh0aW1lKDApKTsKICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKICAgICAgICBhW2ldID0gcmFuZCgpOwogICAgICAgIHByaW50ZigiJWQgIiwgYVtpXSk7CiAgICB9CgogICAgbWVyZ2Vfc29ydChhLCAwLCBuIC0gMSk7CgogICAgcHJpbnRmKCJcblxuQWZ0ZXIgc29ydGluZzpcbiIpOwogICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykKICAgICAgICBwcmludGYoIiVkICIsIGFbaV0pOwoKICAgIHByaW50ZigiXG5cbk51bWJlciBvZiBiYXNpYyBvcGVyYXRpb25zID0gJWRcbiIsIGNvdW50KTsKCiAgICByZXR1cm4gMDsKfQo=