#include
using namespace std;
void merge(int *a, int s, int e){
int med = (s+e)/2;
int i = s;
int j = med+1;
int k = s;
int temp[100];
while(i<=med && j<=e){
if(a[i] < a[j]){
temp[k++] = a[i++];
}
else{
temp[k++] = a[j++];
}
}
while(i<med){
temp[k++] = a[i++];
}
while(j<e){
temp[k++] = a[j++];
}
for(int i = s; i<=e; i++){
a[i] = temp[i];
}
}
void mergesort(int a[], int s, int e){
if(s>=e){
return;
}
//three steps
//1. Divide
int med = (s+e)/2;
//recursively the arrays
mergesort(a, s, med);
mergesort(a, med+1, e);
//merge
merge(a, s, e);
}
int main(){
int a[100];
int n;
cin>>n;
for(int i=0; i<n; i++){
cin>>a[i];
}
mergesort(a, 0, n-1);
for(int i = 0; i<n; i++){
cout<<a[i]<<" , ";
}
return 0;
}
you can use one temp array also , make L[ ] & R[ ] act as one , but to avoid complexity of the program and to give a better explanation I took 2 arrays .