#include <stdio.h>
int merge(int arr[],int arrStart,int mid,int arrEnd){
int i =arrStart;
int j=mid;
int len =arrEnd-arrStart;
if(len<2){
return 0;
}
int temp[len];
int tempindex=0;
while(i<mid && j< arrEnd){
if(arr[i]>arr[j]){
temp[tempindex++]=arr[j];
j++;
}else{
temp[tempindex++]=arr[i];
i++;
}
}
while(i<mid){
temp[tempindex++]=arr[i++];
}
while(j<arrEnd){
temp[tempindex++]=arr[j++];
}
for (tempindex=0,i = arrStart; tempindex < len && i < arrEnd ;tempindex++,i++){
arr[i]=temp[tempindex];
}
return 1;
}
int mergeSort(int arr[],int arrStart,int arrEnd){
int arrlen =arrEnd-arrStart;
if(arrlen == 1){
return 1;
}
int mid =arrStart + arrlen/2;
mergeSort(arr,arrStart,mid);
mergeSort(arr,mid,arrEnd);
return merge(arr,arrStart,mid,arrEnd);
}
int main () {
int arr[]={1,6,6,9,5,2,3,11,58};
mergeSort(arr,0,9);
for(int i=0;i<9;i++){
printf("%d ",arr[i]);
}
return 0;
}