二分归并排序是归并排序(合并排序)里面最简单的一种实现。
这个算法的主要思想是:将被排序的数组划分成相等的两个子数组,然后递归使用同样的算法分别对两个子数组排序。最好将两个排好序的子数组归并成一个数组。
归并的过程如下:假设两个子数组是A和B,它们的元素都按照从小到大的顺序排列。将A与B归并后的数组记作C。设定两个指针p1,p2,初始分别指向A和B的最小元素。归并时只需比较p1,p2指向的元素,哪个元素小,就把它从原来的数组移到C,原来指向它的指针向后移动一个位置。如果A和B中有一个数组的元素已经被全部移走,那么比较过程结束,剩下的工作就是将B中剩下的元素顺序移动C的后面。
考虑10个数的数组:1,5,7,8,2,4,6,9,10,3,使用归并排序算法,首先划分成两个子数组,即A=[1,5,7,8,2],B=[4,6,9,10,3]. 然后对于A和B分别调用同样的算法进行排序。假设A和B已经完成排序,即A=[1,2,5,7,8],B=[3,4,6,9,10],下面进行归并。首先1与3 比较,拿走1;接着2与3比较,拿走2;再接着5和3比较,拿走3,.........继续下去,依次拿走4,5,6,7,8.这是A数组已经空了,比较结束,把B中剩下的9和10顺序放到归并后的数组中。