#include <stdlib.h>
#include <string.h>
void Merge(int* _arr, int* _left, const int _left_len, int* _right, const int _right_len){
if(_arr && _left && _right){
int i = 0, j = 0, index = 0;
while(i < _left_len && j < _right_len)
_arr[index++] = _left[i] < _right[j] ? _left[i++]:_right[j++];
while(i < _left_len) _arr[index++] = _left[i++];
while(j < _right_len) _arr[index++] = _right[j++];
}
}
void MergeSort(int* _arr, int _len){
if(_arr && _len > 1){
int _mid = _len/2;
int* _left = (int*)malloc(sizeof(int)*_mid);
memset(_left, 0, _mid);
int* _right = (int*)malloc(sizeof(int)*(_len-_mid));
memset(_right, 0, _len-_mid);
for(int i = 0; i < _mid; ++i) _left[i] = _arr[i];
for(int j = _mid; j < _len; ++j) _right[j-_mid] = _arr[j];
MergeSort(_left, _mid);
MergeSort(_right, _len-_mid);
Merge(_arr, _left, _mid, _right, _len-_mid);
free(_left);
free(_right);
}
}