自顶向下分治实现的归并算法

来源:互联网 发布:一彩软件 编辑:程序博客网 时间:2024/05/01 22:53

归并排序在排序算法中对于较大数组是复杂度低于插入排序等算法,代码中merge为一趟归并,合并两个已排序好的子数组,即将两个待排序数组作比较,依次将较小的数放入新的数组,重复此步骤直到一个子数组为空,然后依次将另一个数组输入到新数组,就完成了一次归并。本代码采用了设立哨兵值来避免子数组为空的情况。每当哨兵值被显露时,他不可能为较小数,除非此时两子数组都已显露哨兵值,但此时排序已经完成。

分治算法的步骤:

分解:将当前区间一分为二,即求分裂点:mid = (low+high)/2;
求解:递归地对两个子区间R[low..mid]和R[mid+1..high]进行归并排序;
组合:将已排序的两个子区间R[low..mid]和R[mid+1..high]归并为一个有序的区间R[low..high]。

递归的终结条件:子区间长度为1(一个记录自然有序)。


merge_sort函数递归调用



0 0