void merge(int arr[], int beg, int end) {
int m = (beg+end) /2 ;
int i = beg , j = m + 1;
int k = 0;
int tmp[end-beg + 1];
while(i <= m && j <= end) {
if(arr[i] < arr[j]) {
tmp[k++] = arr[i++];
} else {
tmp[k++] = arr[j++];
}
}
while(i <= m) {
tmp[k++] = arr[i++];
}
while(j <= end) {
tmp[k++] = arr[j++];
}
for(int i = 0 ; i < k ; i++) {
arr[beg+i] = tmp[i];
}
}
void merge_sort(int arr[] ,int beg , int end) {
if (beg == end) return;
int m = (beg + end) / 2;
merge_sort(arr, beg, m);
merge_sort(arr,m+1, end);
merge(arr,beg,end);
}
void print_array(int *arr , int n) {
for(int i = 0; i < n ; i++) {
printf("%d\t",arr[i]);
}
printf("\n");
}
int main() {
int arr[] = {2 , -4 , 5 , 10 , 3 , 6 , -26 , 100 , -3 , -5 , -12};
merge_sort(arr,0,11);
print_array(arr, 11);
return 0;
}