归并排序的原理
归并排序递归的将待排序数组分为左,右2段,然后分别对左右2段数组在分别排序,直到待排序长度变为1时(长度为1的序列有序),然后开始归并,归并的过程中,按照元素的大小归并到原数组中,最终使原数组有序。贴上一张图便于大家理解。
#define INFINITE 1000000
void Merage(int* array, int start,int end,int divide)
{
if (array == NULL || start >= end)
{
return;
}
int left[divide - start + 1 + 1] ;
int right[end - divide + 1];
left[divide - start + 1] = INFINITE;
right[end - divide] = INFINITE;
for (int i = 0; i < divide - start + 1; i++)
{
left[i] = array[start + i];
}
for (int i = 0 ; i < end - divide; i++)
{
right[i] = array[divide + i + 1];
}
int m = 0;
int n = 0;
for (int i = start; i <= end; i++)
{
if (left[m] > right[n])
{
array[i] = right[n];
n ++;
}
else
{
array[i] = left[m];
m ++;
}
}
}
void Merage_Sort(int* array, int start, int end)
{
if (array == NULL || start >= end)
{
return;
}
int divide = (start + end) / 2;
Merage_Sort(array, start, divide);
Merage_Sort(array, divide + 1, end);
Merage(array, start, end, divide);
}