排序算法之--归并排序(好玩的一个算法o。o)快速入门

排序算法之--归并排序(好玩的一个算法o。o)

下面是归并操作的基本思路(注意:是归并操作哦,不是归并排序哦)

归并操作的工作原理如下:
第一步:申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列
第二步:设定两个指针,最初位置分别为两个已经排序序列的起始位置
第三步:比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移动指针到下一位置
重复步骤3直到某一指针超出序列尾
将另一序列剩下的所有元素直接复制到合并序列尾。



大家需要注意的是,进行归并操作来实现数组排序的前提是:归并操作两边的数组要都是有序的(所以这里又涉及到了递归的过程,而单单递归好像也没用哦,有用的递归是从小范围开始递归到大范围,所以这里又涉及到了,中分递归)。

了解了这个大题的四路:归并排序其实也不是很难理解了哦。

直接上个图,便于理解:

排序算法之--归并排序(好玩的一个算法o。o)快速入门

图片的分解其实就相当于中分递归,后面的合并其实就是归并操作;

先来了解一下归并操作的编程部分:

先定义两个指针,一个指向左边,一个指向中间+1,再定义一个辅助数组help[](说明其空间复杂度为O(N)哦)

来比较一下大小,小的元素放到辅助数组中,并将下标++,直到两个指针有一个为空,跳出,将另外一部分还没放到辅助数组的元素拷贝到辅助数组中去。下面供上流程图:

排序算法之--归并排序(好玩的一个算法o。o)快速入门


通俗易懂就是这个:

排序算法之--归并排序(好玩的一个算法o。o)快速入门

下面对程序进行分析:

26~30行定义变量和数组

31,32判断有没有越界,没有越界就比较大小,小的放进去,同时辅助数组下标++,比较小的指针也++

37~47则是将将另外一部分还没放到辅助数组的元素拷贝到辅助数组中去。

到这里那我们就直接上程序了哦。

排序算法之--归并排序(好玩的一个算法o。o)快速入门


下面就是所谓的中分递归和归并递归了;

排序算法之--归并排序(好玩的一个算法o。o)快速入门