#include<stdio.h>
#include<windows.h>
void MergeArray(int* arr, int left, int mid, int right, int* tmp)
{
int index_left = left;
int index_right = mid;
int tmp_left = left;
while (index_left<mid && index_right < right)
{
if (arr[index_left] < arr[index_right])
{
tmp[tmp_left++] = arr[index_left++];
}
else
{
tmp[tmp_left++] = arr[index_right++];
}
}
while (index_left < mid)
{
tmp[tmp_left++] = arr[index_left++];
}
while (index_right<right)
{
tmp[tmp_left++] = arr[index_right++];
}
int i = left;
for (; i < right; ++i)
{
arr[i] = tmp[i];
}
return;
}
void _MergeSort(int* arr, int left, int right, int* tmp)
{
if (right - left <= 1)
{
return;
}
int mid = left + (right - left) / 2;
_MergeSort(arr, left, mid, tmp);
_MergeSort(arr, mid, right, tmp);
MergeArray(arr, left, mid, right, tmp);
}
void MergeSort(int* arr, size_t size)
{
if (arr == NULL || size <= 1)
{
return;
}
int left = 0;
int right = size;
int *tmp = (int*)malloc(size*sizeof(int));
_MergeSort(arr, left, right,tmp);
free(tmp);
}
int main()
{
int arr[10] = { 10, 55, 4, 1, 6, 9, 8, 7, 12, 69 };
size_t size = 10;
MergeSort(arr, size);
int i = 0;
for (; i < 10; ++i)
{
printf("%d ", arr[i]);
}
printf("\n");
system("pause");
return 0;
}