- #include<stdio.h> 
- #include<stdlib.h> 
- void mergesort(int[], int, int); 
- void merge(int[], int, int, int); 
- void printarray(int[]); 
-   
- int gs; 
- int main() 
- { 
-     int* a,i,s; 
-     printf("Enter size of the array\n"); 
-     scanf("%d",&s); 
-     a = (int*)calloc(s,sizeof(int)); 
-     gs = s; 
-     printf("Enter the array\n"); 
-     for(i=0;i<s;i++) 
-     { 
-         scanf("%d",&a[i]); 
-     } 
-   
-     printf("Showing the array\n"); 
-   
-     printarray(a); 
-     printf("\n"); 
-   
-     mergesort(a,0,s-1); 
-   
-     printf("The sorted array is:\n"); 
-     printarray(a); 
-   
-     free(a); 
-     return 0; 
- } 
-   
- void mergesort(int a[], int f, int l) 
- { 
-     int m; 
-     if(f<l) 
-     { 
-         m = (f+l)/2; 
-         mergesort(a,f,m); 
-         mergesort(a,m+1,l); 
-         merge(a,f,m,l); 
-     } 
- } 
-   
- void merge(int a[], int f, int m, int l) 
- { 
-     int* t,i,j,h1,h2; 
-     t = (int*)calloc(l-f+1,sizeof(int)); 
-     h1 = f; 
-     i = 0; 
-     h2 = m+1; 
-     while(h1 <= m && h2 <= l) 
-     { 
-         if(a[h1] < a[h2]) 
-         { 
-             t[i] = a[h1]; 
-             h1++; 
-         } 
-         else 
-         { 
-             t[i] = a[h2]; 
-             h2++; 
-         } 
-         i++; 
-     } 
-   
-     if(h1>m) 
-     { 
-         for(j=h2; j<=l; j++) 
-         { 
-             t[i] = a[j]; 
-             i++; 
-         } 
-     } 
-     else 
-     { 
-         for(j=h1; j<=m; j++) 
-         { 
-             t[i] = a[j]; 
-             i++; 
-         } 
-     } 
-   
-     for(j=f;j<=l;j++) 
-     a[j] = t[j -f]; 
-   
-     free(t); 
-     printarray(a); 
- } 
-   
- void printarray(int a[]) 
- { 
-     int i; 
-     for(i=0;i<gs;i++) 
-     printf("%d ",a[i]); 
-     printf("\n"); 
- } 
				I2luY2x1ZGU8c3RkaW8uaD4KI2luY2x1ZGU8c3RkbGliLmg+CnZvaWQgbWVyZ2Vzb3J0KGludFtdLCBpbnQsIGludCk7CnZvaWQgbWVyZ2UoaW50W10sIGludCwgaW50LCBpbnQpOwp2b2lkIHByaW50YXJyYXkoaW50W10pOwoKaW50IGdzOwppbnQgbWFpbigpCnsKICAgIGludCogYSxpLHM7CiAgICBwcmludGYoIkVudGVyIHNpemUgb2YgdGhlIGFycmF5XG4iKTsKICAgIHNjYW5mKCIlZCIsJnMpOwogICAgYSA9IChpbnQqKWNhbGxvYyhzLHNpemVvZihpbnQpKTsKICAgIGdzID0gczsKICAgIHByaW50ZigiRW50ZXIgdGhlIGFycmF5XG4iKTsKICAgIGZvcihpPTA7aTxzO2krKykKICAgIHsKICAgICAgICBzY2FuZigiJWQiLCZhW2ldKTsKICAgIH0KCiAgICBwcmludGYoIlNob3dpbmcgdGhlIGFycmF5XG4iKTsKCiAgICBwcmludGFycmF5KGEpOwogICAgcHJpbnRmKCJcbiIpOwoKICAgIG1lcmdlc29ydChhLDAscy0xKTsKCiAgICBwcmludGYoIlRoZSBzb3J0ZWQgYXJyYXkgaXM6XG4iKTsKICAgIHByaW50YXJyYXkoYSk7CgogICAgZnJlZShhKTsKICAgIHJldHVybiAwOwp9Cgp2b2lkIG1lcmdlc29ydChpbnQgYVtdLCBpbnQgZiwgaW50IGwpCnsKICAgIGludCBtOwogICAgaWYoZjxsKQogICAgewogICAgICAgIG0gPSAoZitsKS8yOwogICAgICAgIG1lcmdlc29ydChhLGYsbSk7CiAgICAgICAgbWVyZ2Vzb3J0KGEsbSsxLGwpOwogICAgICAgIG1lcmdlKGEsZixtLGwpOwogICAgfQp9Cgp2b2lkIG1lcmdlKGludCBhW10sIGludCBmLCBpbnQgbSwgaW50IGwpCnsKICAgIGludCogdCxpLGosaDEsaDI7CiAgICB0ID0gKGludCopY2FsbG9jKGwtZisxLHNpemVvZihpbnQpKTsKICAgIGgxID0gZjsKICAgIGkgPSAwOwogICAgaDIgPSBtKzE7CiAgICB3aGlsZShoMSA8PSBtICYmIGgyIDw9IGwpCiAgICB7CiAgICAgICAgaWYoYVtoMV0gPCBhW2gyXSkKICAgICAgICB7CiAgICAgICAgICAgIHRbaV0gPSBhW2gxXTsKICAgICAgICAgICAgaDErKzsKICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgICAgdFtpXSA9IGFbaDJdOwogICAgICAgICAgICBoMisrOwogICAgICAgIH0KICAgICAgICBpKys7CiAgICB9CgogICAgaWYoaDE+bSkKICAgIHsKICAgICAgICBmb3Ioaj1oMjsgajw9bDsgaisrKQogICAgICAgIHsKICAgICAgICAgICAgdFtpXSA9IGFbal07CiAgICAgICAgICAgIGkrKzsKICAgICAgICB9CiAgICB9CiAgICBlbHNlCiAgICB7CiAgICAgICAgZm9yKGo9aDE7IGo8PW07IGorKykKICAgICAgICB7CiAgICAgICAgICAgIHRbaV0gPSBhW2pdOwogICAgICAgICAgICBpKys7CiAgICAgICAgfQogICAgfQoKICAgIGZvcihqPWY7ajw9bDtqKyspCiAgICBhW2pdID0gdFtqIC1mXTsKCiAgICBmcmVlKHQpOwogICAgcHJpbnRhcnJheShhKTsKfQoKdm9pZCBwcmludGFycmF5KGludCBhW10pCnsKICAgIGludCBpOwogICAgZm9yKGk9MDtpPGdzO2krKykKICAgIHByaW50ZigiJWQgIixhW2ldKTsKICAgIHByaW50ZigiXG4iKTsKfQ==