#include<bits/stdc++.h>
using namespace std;
void Merge(int arr[],int start,int mid, int end)
{
int n1=mid-start+1; /// size of left array
int n2=end-mid; /// size of right array
int L[n1],R[n2];
for(int i=0; i<n1; i++)
{
L[i]=arr[start+i];
}
for(int i=0; i<n2; i++)
{
R[i]=arr[mid+1+i];
}
int i=0,j=0,k=start;
while(i<n1 && j<n2)
{
if(L[i]<=R[j])
{
arr[k]=L[i];
i++;
k++;
}
else
{
arr[k]=R[j];
j++;
k++;
}
}
while(j<n2)
{
arr[k]=R[j];
j++;
k++;
}
while(i<n1)
{
arr[k]=L[i];
i++;
k++;
}
}
void mergeSort(int arr[], int start, int end)
{
if (start<end)
{
int mid=(start+end)/2;
mergeSort(arr,start,mid);
mergeSort (arr, mid+1,end);
Merge(arr,start,mid,end);
}
}
int main()
{
int arr[]= {21,3,54,-45,78,2,-1};
int n= sizeof(arr)/sizeof(arr[0]);
mergeSort(arr,0,n-1);
cout<<"after sorting in descendig order: ";
for(int i=n-1; i>=0; i--)
{
cout<<arr[i]<<" ";
}
cout<<endl;
cout<<"after sorting in ascending order: ";
for(int i=0; i<n; i++)
{
cout<<arr[i]<<" ";
}
return 0;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnZvaWQgTWVyZ2UoaW50IGFycltdLGludCBzdGFydCxpbnQgbWlkLCBpbnQgZW5kKQp7CgogICAgaW50IG4xPW1pZC1zdGFydCsxOyAvLy8gc2l6ZSBvZiBsZWZ0IGFycmF5CiAgICBpbnQgbjI9ZW5kLW1pZDsgLy8vIHNpemUgb2YgcmlnaHQgYXJyYXkKICAgIGludCBMW24xXSxSW24yXTsKCgoKICAgIGZvcihpbnQgaT0wOyBpPG4xOyBpKyspCiAgICB7CgogICAgICAgIExbaV09YXJyW3N0YXJ0K2ldOwogICAgfQoKICAgIGZvcihpbnQgaT0wOyBpPG4yOyBpKyspCiAgICB7CgogICAgICAgIFJbaV09YXJyW21pZCsxK2ldOwogICAgfQoKICAgIGludCBpPTAsaj0wLGs9c3RhcnQ7CiAgICB3aGlsZShpPG4xICYmIGo8bjIpCiAgICB7CiAgICAgICAgaWYoTFtpXTw9UltqXSkKICAgICAgICB7CiAgICAgICAgICAgIGFycltrXT1MW2ldOwogICAgICAgICAgICBpKys7CiAgICAgICAgICAgIGsrKzsKICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgICAgYXJyW2tdPVJbal07CiAgICAgICAgICAgIGorKzsKICAgICAgICAgICAgaysrOwogICAgICAgIH0KICAgIH0KICAgIHdoaWxlKGo8bjIpCiAgICB7CiAgICAgICAgYXJyW2tdPVJbal07CiAgICAgICAgaisrOwogICAgICAgIGsrKzsKICAgIH0KICAgIHdoaWxlKGk8bjEpCiAgICB7CiAgICAgICAgYXJyW2tdPUxbaV07CiAgICAgICAgaSsrOwogICAgICAgIGsrKzsKICAgIH0KCgp9Cgp2b2lkIG1lcmdlU29ydChpbnQgYXJyW10sIGludCBzdGFydCwgaW50IGVuZCkKewoKCiAgICBpZiAoc3RhcnQ8ZW5kKQogICAgewogICAgICAgIGludCBtaWQ9KHN0YXJ0K2VuZCkvMjsKICAgICAgICBtZXJnZVNvcnQoYXJyLHN0YXJ0LG1pZCk7CiAgICAgICAgbWVyZ2VTb3J0IChhcnIsIG1pZCsxLGVuZCk7CiAgICAgICAgTWVyZ2UoYXJyLHN0YXJ0LG1pZCxlbmQpOwogICAgfQp9CgppbnQgbWFpbigpCnsKCiAgICBpbnQgYXJyW109IHsyMSwzLDU0LC00NSw3OCwyLC0xfTsKICAgIGludCBuPSBzaXplb2YoYXJyKS9zaXplb2YoYXJyWzBdKTsKCiAgICBtZXJnZVNvcnQoYXJyLDAsbi0xKTsKCiAgICBjb3V0PDwiYWZ0ZXIgc29ydGluZyBpbiBkZXNjZW5kaWcgb3JkZXI6ICI7CiAgICBmb3IoaW50IGk9bi0xOyBpPj0wOyBpLS0pCiAgICB7CiAgICAgICAgY291dDw8YXJyW2ldPDwiICI7CiAgICB9CiAgICBjb3V0PDxlbmRsOwogICAgY291dDw8ImFmdGVyIHNvcnRpbmcgaW4gYXNjZW5kaW5nIG9yZGVyOiAiOwogICAgZm9yKGludCBpPTA7IGk8bjsgaSsrKQogICAgewogICAgICAgIGNvdXQ8PGFycltpXTw8IiAiOwogICAgfQogICAgcmV0dXJuIDA7Cn0K