#include<stdio.h>
#include<stdlib.h>
int n; //initial no. of integers in array
int * list; //pointer to the array of integers
int * MergeSort( int * A, int x, int y) ; //definition, return type is pointer to integer array
void main( )
{
printf ( "Enter the no. of integers in the array: " ) ;
list
= ( int * ) malloc ( n
* sizeof ( int ) ) ;
for ( int i= 0 ; i< n; i++ ) //taking input
{
}
list= MergeSort( list, 0 , n- 1 ) ; //calling MergeSort on list from index 0 to index n-1
for ( int i= 0 ; i< n; i++ ) //printing output
{
}
}
int * MergeSort( int * A, int x, int y) //declaration
{
if ( x== y) //base case, return the 1-element array itself
{
return A;
}
else
{
int size= 1 + y- x; //total no. of elements
int half= ( x+ y) / 2 ; //halving the array
int halfsize= ( size/ 2 ) ;
int * A1
= ( int * ) malloc ( halfsize
* sizeof ( int ) ) ; int * A2
= ( int * ) malloc ( ( size
- halfsize
) * sizeof ( int ) ) ; A1= MergeSort( A, x, half) ; //calling MergeSort on 1st half of array
A2= MergeSort( A, half+ 1 , y) ; //calling MergeSort on 2nd half of array
int * C; //pointer to 3rd array
C
= ( int * ) malloc ( size
* sizeof ( int ) ) ; int j= 0 ; //indicator for first half
int k= 0 ; //indicator for 2nd half
int i= 0 ; //indicator for 3rd array
while ( ( j<= half) && ( k<= half) ) //till all the elements from either half are not exhausted
{
if ( A1[ j] <= A2[ k] ) //if element of first half is smaller, put that in C
{
C[ i] = A1[ j] ;
j++;
}
else //otherwise put element of second half in C
{
C[ i] = A2[ k] ;
k++;
}
i++; //increment indicator for C
}
int flag;
if ( j== ( half+ 1 ) )
{
flag= 1 ;
}
else if ( k== ( half+ 1 ) )
{
flag= 2 ;
}
if ( flag== 1 ) //if first half is finished
{
while ( i< size) //transfer all elements of second half in C
{
C[ i] = A2[ k] ;
i++;
k++;
}
}
else if ( flag== 2 ) //if second half is finished
{
while ( i< size) //transfer all elements of 1st half in C
{
C[ i] = A1[ j] ;
i++;
j++;
}
}
for ( int i= x; i<= y; i++ ) //copyback
{
A[ x] = C[ i- x] ;
}
return A;
}
}
I2luY2x1ZGU8c3RkaW8uaD4KI2luY2x1ZGU8c3RkbGliLmg+CgppbnQgbjsgLy9pbml0aWFsIG5vLiBvZiBpbnRlZ2VycyBpbiBhcnJheQppbnQgKmxpc3Q7IC8vcG9pbnRlciB0byB0aGUgYXJyYXkgb2YgaW50ZWdlcnMKaW50ICpNZXJnZVNvcnQoaW50ICpBLCBpbnQgeCwgaW50IHkpOyAvL2RlZmluaXRpb24sIHJldHVybiB0eXBlIGlzIHBvaW50ZXIgdG8gaW50ZWdlciBhcnJheQoKCnZvaWQgbWFpbigpCnsKCXByaW50ZigiRW50ZXIgdGhlIG5vLiBvZiBpbnRlZ2VycyBpbiB0aGUgYXJyYXk6ICIpOwoJc2NhbmYoIiVkIiwmbik7CgkKCWxpc3Q9KGludCAqKW1hbGxvYyhuKnNpemVvZihpbnQpKTsKCglmb3IoaW50IGk9MDtpPG47aSsrKSAvL3Rha2luZyBpbnB1dAoJewkKCQlwcmludGYoIlxuRW50ZXIgYSBuby46ICIpOwoJCXNjYW5mKCIlZCIsJmxpc3RbaV0pOwoJfQoKCWxpc3Q9TWVyZ2VTb3J0KGxpc3QsMCxuLTEpOyAvL2NhbGxpbmcgTWVyZ2VTb3J0IG9uIGxpc3QgZnJvbSBpbmRleCAwIHRvIGluZGV4IG4tMQoKCWZvcihpbnQgaT0wO2k8bjtpKyspIC8vcHJpbnRpbmcgb3V0cHV0Cgl7CQoJCXByaW50ZigiJWQgIixsaXN0W2ldKTsKCX0KCQp9CgppbnQgKk1lcmdlU29ydChpbnQgKkEsIGludCB4LCBpbnQgeSkgLy9kZWNsYXJhdGlvbgp7CglpZih4PT15KSAvL2Jhc2UgY2FzZSwgcmV0dXJuIHRoZSAxLWVsZW1lbnQgYXJyYXkgaXRzZWxmCgl7CgkJcmV0dXJuIEE7Cgl9CgoJZWxzZQoJewoJCWludCBzaXplPTEreS14OyAvL3RvdGFsIG5vLiBvZiBlbGVtZW50cwoJCWludCBoYWxmPSh4K3kpLzI7IC8vaGFsdmluZyB0aGUgYXJyYXkKCgkJaW50IGhhbGZzaXplPShzaXplLzIpOwoJCWludCAqQTE9KGludCAqKW1hbGxvYyhoYWxmc2l6ZSpzaXplb2YoaW50KSk7CgkJaW50ICpBMj0oaW50ICopbWFsbG9jKChzaXplLWhhbGZzaXplKSpzaXplb2YoaW50KSk7CQoJCUExPU1lcmdlU29ydChBLCB4LCBoYWxmKTsJCQkvL2NhbGxpbmcgTWVyZ2VTb3J0IG9uIDFzdCBoYWxmIG9mIGFycmF5CgkJQTI9TWVyZ2VTb3J0KEEsIGhhbGYrMSwgeSk7CQkvL2NhbGxpbmcgTWVyZ2VTb3J0IG9uIDJuZCBoYWxmIG9mIGFycmF5CgoJCQoJCWludCAqQzsJCQkJCQkJCQkvL3BvaW50ZXIgdG8gM3JkIGFycmF5CgkJQz0oaW50ICopbWFsbG9jKHNpemUqc2l6ZW9mKGludCkpOwoJCWludCBqPTA7IAkJCS8vaW5kaWNhdG9yIGZvciBmaXJzdCBoYWxmCgkJaW50IGs9MDsJCQkvL2luZGljYXRvciBmb3IgMm5kIGhhbGYKCQlpbnQgaT0wOwkJCS8vaW5kaWNhdG9yIGZvciAzcmQgYXJyYXkKCgkJCgkJd2hpbGUoKGo8PWhhbGYpJiYoazw9aGFsZikpCQkJLy90aWxsIGFsbCB0aGUgZWxlbWVudHMgZnJvbSBlaXRoZXIgaGFsZiBhcmUgbm90IGV4aGF1c3RlZAoJCXsKCQkJaWYoQTFbal08PUEyW2tdKQkJCQkJLy9pZiBlbGVtZW50IG9mIGZpcnN0IGhhbGYgaXMgc21hbGxlciwgcHV0IHRoYXQgaW4gQwoJCQl7CgkJCQlDW2ldPUExW2pdOwoJCQkJaisrOwoJCQl9CgkJCWVsc2UJCQkJCS8vb3RoZXJ3aXNlIHB1dCBlbGVtZW50IG9mIHNlY29uZCBoYWxmIGluIEMKCQkJewoJCQkJQ1tpXT1BMltrXTsKCQkJCWsrKzsKCQkJfQoJCQlpKys7CQkJCS8vaW5jcmVtZW50IGluZGljYXRvciBmb3IgQwoJCX0KCQlpbnQgZmxhZzsKCQlpZihqPT0oaGFsZisxKSkKCQl7CgkJCWZsYWc9MTsKCQl9CgkJZWxzZSBpZihrPT0oaGFsZisxKSkKCQl7CgkJCWZsYWc9MjsKCQl9CgkJaWYoZmxhZz09MSkgCQkvL2lmIGZpcnN0IGhhbGYgaXMgZmluaXNoZWQKCQl7CgkJCXdoaWxlKGk8c2l6ZSkgCQkvL3RyYW5zZmVyIGFsbCBlbGVtZW50cyBvZiBzZWNvbmQgaGFsZiBpbiBDCgkJCXsKCQkJCUNbaV09QTJba107CgkJCQlpKys7CgkJCQlrKys7CgkJCX0KCQkJCgkJfQoJCWVsc2UgaWYoZmxhZz09MikgLy9pZiBzZWNvbmQgaGFsZiBpcyBmaW5pc2hlZAoJCXsKCQkJd2hpbGUoaTxzaXplKSAvL3RyYW5zZmVyIGFsbCBlbGVtZW50cyBvZiAxc3QgaGFsZiBpbiBDCgkJCXsKCQkJCUNbaV09QTFbal07CgkJCQlpKys7CgkJCQlqKys7CgkJCX0KCQl9CgkJCQkKCQkKCQlmb3IoaW50IGk9eDtpPD15O2krKykgLy9jb3B5YmFjawoJCXsKCQkJQVt4XT1DW2kteF07CgkJfQoJCWZyZWUoQTEpOwoJCWZyZWUoQTIpOwoJCWZyZWUoQyk7CgkJcmV0dXJuIEE7Cgl9CgkKCn0=