#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+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPHRpbWUuaD4KCmludCBjb3VudCA9IDA7Cgp2b2lkIG1lcmdlKGludCBhW10sIGludCBsb3csIGludCBtaWQsIGludCBoaWdoKSB7CiAgICBpbnQgaSA9IGxvdywgaiA9IG1pZCArIDEsIGsgPSAwOwogICAgaW50IGNbMTAwMDBdOwoKICAgIHdoaWxlIChpIDw9IG1pZCAmJiBqIDw9IGhpZ2gpIHsKICAgICAgICBjb3VudCsrOyAgLy8gQ291bnQgZWFjaCBjb21wYXJpc29uCiAgICAgICAgaWYgKGFbaV0gPCBhW2pdKQogICAgICAgICAgICBjW2srK10gPSBhW2krK107CiAgICAgICAgZWxzZQogICAgICAgICAgICBjW2srK10gPSBhW2orK107CiAgICB9CgogICAgd2hpbGUgKGkgPD0gbWlkKQogICAgICAgIGNbaysrXSA9IGFbaSsrXTsKICAgIHdoaWxlIChqIDw9IGhpZ2gpCiAgICAgICAgY1trKytdID0gYVtqKytdOwoKICAgIGZvciAoaSA9IGxvdywgaiA9IDA7IGogPCBrOyBpKyssIGorKykKICAgICAgICBhW2ldID0gY1tqXTsKfQoKdm9pZCBtZXJnZV9zb3J0KGludCBhW10sIGludCBsb3csIGludCBoaWdoKSB7CiAgICBpZiAobG93IDwgaGlnaCkgewogICAgICAgIGludCBtaWQgPSAobG93ICsgaGlnaCkgLyAyOwogICAgICAgIG1lcmdlX3NvcnQoYSwgbG93LCBtaWQpOwogICAgICAgIG1lcmdlX3NvcnQoYSwgbWlkICsgMSwgaGlnaCk7CiAgICAgICAgbWVyZ2UoYSwgbG93LCBtaWQsIGhpZ2gpOwogICAgfQp9CgppbnQgbWFpbigpIHsKICAgIGludCBhWzEwMDAwXSwgbiwgaTsKCiAgICBwcmludGYoIkVudGVyIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIGFycmF5OiAiKTsKICAgIHNjYW5mKCIlZCIsICZuKTsKCiAgICBwcmludGYoIkFsbCB0aGUgZWxlbWVudHM6XG4iKTsKICAgIHNyYW5kKHRpbWUoMCkpOwogICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgewogICAgICAgIGFbaV0gPSByYW5kKCk7CiAgICAgICAgcHJpbnRmKCIlZCAiLCBhW2ldKTsKICAgIH0KCiAgICBtZXJnZV9zb3J0KGEsIDAsIG4gLSAxKTsKCiAgICBwcmludGYoIlxuXG5BZnRlciBzb3J0aW5nOlxuIik7CiAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKQogICAgICAgIHByaW50ZigiJWQgIiwgYVtpXSk7CgogICAgcHJpbnRmKCJcblxuTnVtYmVyIG9mIGJhc2ljIG9wZXJhdGlvbnMgPSAlZFxuIiwgY291bnQpOwoKICAgIHJldHVybiAwOwp9Cg==