//Merge Sort
#include<bits/stdc++.h>
using namespace std;
void merger(int arr[], int left, int mid, int right){
int n1 = mid-left+1; //Baam tukror size
int n2 = right-mid; //Daan tukror size
int L[n1], R[n2]; //Temporary arrays
//Data input into L, R side values
for (int i=0; i<n1; i++) L[i] = arr[left+i];
for (int j=0; j<n2; j++) R[j] = arr[mid+1+j];
int i=0, j=0, k=left;
//Loop 1
while (i<n1 && j<n2){
if(L[i] <= R[j]){
arr[k] = L[i]; i++;}
else{
arr[k] = R[j];
j++;
} k++;
}
//Loop 2
while (i<n1){
arr[k] = L[i];
i++; k++;
}
//Loop 3
while (j < n2){
arr[k] = R[j];
j++; k++;
}
}
//Manager er kaaj
void mergeSort(int arr[], int left, int right){
if(left < right){
int mid = left+(right-left)/2;
mergeSort(arr, left, mid);
mergeSort(arr, mid+1, right);
merger(arr, left, mid, right);
}
}
int main(){
int arr[] = {38, 27, 43, 3, 9, 82, 10};
int n=7;
mergeSort(arr, 0, n-1);
cout << "Merge sorted array: ";
for (int i=0; i<n; i++){cout << arr[i] << " ";}
return 0;
}
Ly9NZXJnZSBTb3J0CiNpbmNsdWRlPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgp2b2lkIG1lcmdlcihpbnQgYXJyW10sIGludCBsZWZ0LCBpbnQgbWlkLCBpbnQgcmlnaHQpewoKICAgIGludCBuMSA9IG1pZC1sZWZ0KzE7IC8vQmFhbSB0dWtyb3Igc2l6ZQogICAgaW50IG4yID0gcmlnaHQtbWlkOyAvL0RhYW4gdHVrcm9yIHNpemUKCiAgICBpbnQgTFtuMV0sIFJbbjJdOyAvL1RlbXBvcmFyeSBhcnJheXMKCiAgICAvL0RhdGEgaW5wdXQgaW50byBMLCBSIHNpZGUgdmFsdWVzCiAgICBmb3IgKGludCBpPTA7IGk8bjE7IGkrKykgTFtpXSA9IGFycltsZWZ0K2ldOwogICAgZm9yIChpbnQgaj0wOyBqPG4yOyBqKyspIFJbal0gPSBhcnJbbWlkKzEral07CgogICAgaW50IGk9MCwgaj0wLCBrPWxlZnQ7CgogICAgLy9Mb29wIDEKICAgIHdoaWxlIChpPG4xICYmIGo8bjIpewogICAgICAgIGlmKExbaV0gPD0gUltqXSl7CiAgICAgICAgICAgICAgICBhcnJba10gPSBMW2ldOyBpKys7fQogICAgICAgIGVsc2V7CiAgICAgICAgICAgIGFycltrXSA9IFJbal07CiAgICAgICAgICAgIGorKzsKICAgICAgICB9IGsrKzsKICAgIH0KCiAgICAvL0xvb3AgMgogICAgd2hpbGUgKGk8bjEpewogICAgICAgIGFycltrXSA9IExbaV07CiAgICAgICAgaSsrOyBrKys7CiAgICB9CgogICAgLy9Mb29wIDMKICAgIHdoaWxlIChqIDwgbjIpewogICAgICAgIGFycltrXSA9IFJbal07CiAgICAgICAgaisrOyBrKys7CiAgICB9Cn0KCgovL01hbmFnZXIgZXIga2Fhagp2b2lkIG1lcmdlU29ydChpbnQgYXJyW10sIGludCBsZWZ0LCBpbnQgcmlnaHQpewogICAgaWYobGVmdCA8IHJpZ2h0KXsKICAgICAgICBpbnQgbWlkID0gbGVmdCsocmlnaHQtbGVmdCkvMjsKICAgICAgICBtZXJnZVNvcnQoYXJyLCBsZWZ0LCBtaWQpOwogICAgICAgIG1lcmdlU29ydChhcnIsIG1pZCsxLCByaWdodCk7CiAgICAgICAgbWVyZ2VyKGFyciwgbGVmdCwgbWlkLCByaWdodCk7CiAgICB9Cgp9CgppbnQgbWFpbigpewoKICAgIGludCBhcnJbXSA9IHszOCwgMjcsIDQzLCAzLCA5LCA4MiwgMTB9OwogICAgaW50IG49NzsKCiAgICBtZXJnZVNvcnQoYXJyLCAwLCBuLTEpOwoKICAgIGNvdXQgPDwgIk1lcmdlIHNvcnRlZCBhcnJheTogIjsKICAgIGZvciAoaW50IGk9MDsgaTxuOyBpKyspe2NvdXQgPDwgYXJyW2ldIDw8ICIgIjt9CiAgICByZXR1cm4gMDsKfQoK