- 归并排序的基本思想
将 两个或两个以上的有序子序列
“归并”为 一个有序序列
。
- 归并排序的核心操作 算法
void Merge(RcdType SR[], RcdType &TR[], int i, int m, int n)
{
for(j=m+1, k=i;
i<=m && j<=n;
k++ )
{
if(SR[i].key <= SR[j].key)
{
TR[k] = SR[i++];
}
else
{
TR[k] = SR[j++];
}
}
if(i <= m)
{
TR[k .. n] = SR[i .. m];
}
if(j <= n)
{
TR[k .. n] = SR[j .. n];
}
}
- 2-路归并排序算法描述
- 2-路归并排序算法
核心操作:将 一维数组中前后相邻的两个有序序列
归并为 一个有序序列
。
void MSort(RcdType SR[], RcdType &TR1[], int s, int t)
{
if(s == t)
{
TR1[s] = SR[s];
}
else
{
m = (s + t) / 2;
MSort(SR, TR2, s, m);
MSort(SR, TR2, m+1, t);
Merge(TR2, TR1, s, m, t);
}
}
void MergeSort(SqList &L)
{
MSort(L.r, L.r, 1, L.length);
}
- 时间性能
每次都 一分为2
所以是 对数
。 - 该
归并类算法
采用了 递归
的算法,形式上很整洁,但实用性较差,实际中很少使用。