排序算法之--归并排序(好玩的一个算法o。o)快速入门
生活随笔
收集整理的这篇文章主要介绍了
排序算法之--归并排序(好玩的一个算法o。o)快速入门
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
排序算法之--归并排序(好玩的一个算法o。o)
下面是归并操作的基本思路(注意:是归并操作哦,不是归并排序哦)
归并操作的工作原理如下: 第一步:申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列 第二步:设定两个指针,最初位置分别为两个已经排序序列的起始位置 第三步:比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移动指针到下一位置 重复步骤3直到某一指针超出序列尾 将另一序列剩下的所有元素直接复制到合并序列尾。大家需要注意的是,进行归并操作来实现数组排序的前提是:归并操作两边的数组要都是有序的(所以这里又涉及到了递归的过程,而单单递归好像也没用哦,有用的递归是从小范围开始递归到大范围,所以这里又涉及到了,中分递归)。
了解了这个大题的四路:归并排序其实也不是很难理解了哦。
直接上个图,便于理解:
图片的分解其实就相当于中分递归,后面的合并其实就是归并操作;
先来了解一下归并操作的编程部分:
先定义两个指针,一个指向左边,一个指向中间+1,再定义一个辅助数组help[](说明其空间复杂度为O(N)哦)
来比较一下大小,小的元素放到辅助数组中,并将下标++,直到两个指针有一个为空,跳出,将另外一部分还没放到辅助数组的元素拷贝到辅助数组中去。下面供上流程图:
通俗易懂就是这个:
下面对程序进行分析:
26~30行定义变量和数组
31,32判断有没有越界,没有越界就比较大小,小的放进去,同时辅助数组下标++,比较小的指针也++
37~47则是将将另外一部分还没放到辅助数组的元素拷贝到辅助数组中去。
到这里那我们就直接上程序了哦。
下面就是所谓的中分递归和归并递归了;
总结
以上是生活随笔为你收集整理的排序算法之--归并排序(好玩的一个算法o。o)快速入门的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: 一篇博客读懂设计模式之-----策略模式
- 下一篇: 详解HTTP协议~~~