排序(4)----归并排序详细分析

归并排序

1.两个有序序列合并核心思想

 对两个有序的序列进行合并  不断选两组第一个,选中的数  
① 那组的指示器后移 
② 数放入新的序列 

a[] = { 3,6 }; b[] = { 1,2 ,9 };

在这里插入图片描述

2.两个有序序列合并代码


void Merge(Rectype R[], int Low, int Mid, int High)
{
 int i = Low, j = Mid + 1, k = 0;  //K是用来存数据的下标,i,j为两端需要合并的下标
 Rectype *RTemp = (Rectype *)malloc((High - Low + 1) * sizeof(Rectype));
 while (i < Mid && j < High)
 {
  if (R[i].Key < R[j].Key)
   RTemp[k++] = R[i++];
  else
   RTemp[k++] = R[j++];
 }
 while (i < Mid) RTemp[k++] = R[i++];//对剩余元素排序
 while (j < High) RTemp[k++] = R[j++];
 for (k = 0, i = Low; i <= High; k++, i++) R[i] = RTemp[k];  //复制到原数组
 free(RTemp);  //销毁
}

自上而下的归并排序代码

void MergeSort(Rectype R[], int Low, int High)
{
 int Mid;
 if (Low < High)
 {
  Mid = (Low + High) / 2;
  MergeSort(R, Low, Mid);
  MergeSort(R, Mid + 1, High);
  Merge(R, Low, Mid, High);
 }
}

猜你喜欢

转载自blog.csdn.net/qq_42146775/article/details/85084984
今日推荐