归并排序
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;
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);
}
}