#include<stdio.h>
#include<math.h>
int main()
{
void MergeSort(int array[],int low,int mid,int high);
void MergeSortHelp(int array[],int low,int high);
int array[10] = {45,156,78,20,78,36,49,1000,875,1};
MergeSortHelp(array,0,9);
int iter = 0;
for(iter = 0;iter < 10;iter ++)
{
printf("%d ",array[iter]);
}
return 0;
}
void MergeSort(int array[],int low,int mid,int high)
{
//生成备用数组
int temp_array[10];
int i,j,k;
//按照某个指定区间开始归并
for(i = low,j = mid + 1,k = low;i <= mid&&j <= high;k ++)
{
if(array[i] > array[j])
{
temp_array[k] = array[j];
j++;
}
else
{
temp_array[k] = array[i];
i ++;
}
}
//归并后,如果有一方还有数据继续把剩余的数据直接复制到后备数组
for(;i <= mid;)
{
temp_array[k] = array[i];
k ++;
i ++;
}
for(;j <= high;)
{
temp_array[k] = array[j];
k ++;
j ++;
}
int iter = 0;
for(iter = low;iter <= high;iter ++)
{
array[iter] = temp_array[iter];
}
}
void MergeSortHelp(int array[],int low,int high)
{
//一直递归,直到low和high的值只相差一
void MergeSort(int array[],int low,int mid,int high);
int mid = (low + high)/2;
if(low < high)
{
//如果low和high的值只相差一,那么接下来的两个mergehelp将会不符合if(low < high)的条件
MergeSortHelp(array,low,mid);
MergeSortHelp(array,mid + 1,high);
MergeSort(array,low,mid,high);
}
}