合并排序法(Merge Sort)的工作原理是针对已排序好的两个或两个以上的数列(或数据文件),通过合并的方式将其组合成一个大的且已排好序的数列(或数据文件)。其步骤如下:
步骤01 将N个长度为1的键值成对地合并成N/2个长度为2的键值组。
步骤02 将N/2个长度为2的键值组成对地合并成N/4个长度为4的键值组。
步骤03 将键值组不断地合并,直到合并成一组长度为N的键值组为止。
下面我们用38、16、41、72、52、98、63、25数列从小到大排序的过程来说明合并排序法的基本演算流程,如图3-23所示。
图3-23 合并排序法的演算流程
图3-23展示的合并排序法例子是一种最简单的合并排序,又称为2路(2-way)合并排序,主要是把原来的数列视作N个已排好序且长度为1的数列,再将这些长度为1的数列两两合并,结合成N/2个已排好序且长度为2的数列;同样的做法,再按序两两合并,合并成N/4个已排好序且长度为4的数列,以此类推,最后合并成一个已排好序且长度为N的数列。
现在将排序步骤整理如下:
步骤01 将N个长度为1的数列合并成N/2个已排序妥当且长度为2的数列。
步骤02 将N/2个长度为2的数列合并成N/4个已排序妥当且长度为4的数列。
步骤03 将N/4个长度为4的数列合并成N/8个已排序妥当且长度为8的数列。
步骤07 将N/2 i-1 个长度为2 i-1 的数列合并成N/2 i 个已排序妥当且长度为2 i 的数列。