#include <stdio.h>
void merge_array(int arr[],int begin, int mid, int end);
void print_array(int arr[], int len);
void merge_sort(int arr[], int begin, int end);
void main(void)
{
int array[8] = {2, 5, 4, 7, 1, 3, 2, 6};
merge_sort(array, 1, 8);
print_array(array, 8);
}
void merge_array(int arr[], int begin, int mid, int end)
{
int i, j, k;
int left_arr_len = mid - begin + 1;
int right_arr_len = end - mid;
int left_array[left_arr_len + 1];
int right_array[right_arr_len + 1];
for (i = 0; i < left_arr_len; i++)
{
left_array[i] = arr[begin+i-1];
}
for (j = 0; j < right_arr_len; j++)
{
right_array[j] = arr[mid+j];
}
left_array[left_arr_len] = 1000;
right_array[right_arr_len] = 1000;
for (k = begin, i = 0, j = 0; k < end+1; k++)
{
if (left_array[i] <= right_array[j])
{
arr[k-1] = left_array[i];
i++;
}
else
{
arr[k-1] = right_array[j];
j++;
}
}
}
void merge_sort(int arr[], int begin, int end)
{
int mid;
if (begin < end)
{
mid = (begin + end) / 2;
merge_sort(arr, begin, mid);
merge_sort(arr, mid + 1, end);
merge_array(arr, begin, mid, end);
}
}
void print_array(int arr[], int len)
{
int i;
for (i = 0; i < len; i++)
{
printf("%d ", arr[i]);
}
printf("\n");
}