Merge:合并

为啥会突然拽个英文,可以发现很多的代码和英文拼写相关,在命名时,术语命名也显得更加专业。merge是归并、合并的意思。

//这里是归并排序
//辅助数组B
ElemType *B = (ElemType *)malloc( (n+1)*sizeof(EleType));
void Merge(ElemType A[],int low,int high,int mid)
{ //表A[low…mid]和A[mid+1…high]
for(int k=low;k<=high;k++)
B[k] = A[k];//将A数组中的所有元素(包括了两组元素) 给B也来一份
for(i=low,j=mid+1,k=i; i<=mid && j<=high; k++)
{
//比较B左右两端的元素,较小的放入A中,形成一个升序序列
if(B[i]<=B[j])
A[k] = B[i++];
else
A[k] = B[j++;]
}
while(i<=mid)// 如果A[low…mid]这边还有元素,另一边已经完成排序,就把未检测完的,复制
A[k] = B[i++];
while(j<=high) //第二个表未检测完,复制 A[k] = B[j++];
}
void MergeSort(ElemType A[],int low,int high)
{
if(low<high)
{
int mid=(low+high)/2;//从中间劈开,划分成两个子表
MergeSort(A,low,mid);//mid属于前一个表中元素,
MergeSort(A,mid+1;high);//与快排不同,基准元素在中间,不属于任何一个子表;此处mid属于前一个子表,后一个表从mid+1开始
MergeSort(A,low,mid,high);//归并
}
}
归并排序也能和树那一章联动。。