归并排序算法详解

归并排序的核心就是将分割后的有序子序列合并成一个有序的序列。

给定一个无序的序列,分割成2段子序列,分割后,要开始合并2段子序列。而合并子序列的前提是子序列必须都是有序的,如果存在无序的子序列,那么将无序的子序列递归分割成更小的子序列,直到子序列有序。

分割后的子序列有序的条件是子序列只有一个元素,所以只有将无序序列的每个元素分割成一个序列,那么才可以开始合并。

所以归并排序的核心思路就是:

1.将无序的序列分成两部分
2.分割后的两段序列是否都是有序
a.都有序,把两段序列合并成一个有序的序列
b.不全是有序,把无序的序列重复步骤1和步骤2,直到将无序序列分割后的子序列都有序为止(分割后的子序列有序只能是序列只有一个元素)。

合并2段子序列的思路:

1.申请一个临时数组,数组大小为能够容纳2段子序列,设置2个指针i,j,分别指向2段子序列的起始位置;

2.如果指针i指向的元素小于j指向的元素,把i指向的元素放入临时数组,i++,否则把j指向的元素放入临时数组,j++。直到其中一个指针已经遍历到序列的尾部才结束序列的元素比较。

3.结束比较后,如果其中某个指针尚未移至序列尾部,那么将序列剩下的元素放入数组中,完成合并。

所以代码就可以这么写。

image
image

推荐阅读:

堆排序其实没那么难

5分钟搞定快速排序

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 本文首发于我的个人博客:尾尾部落 排序算法是最经典的算法知识。因为其实现代码短,应该广,在面试中经常会问到排序算法...
    繁著阅读 4,594评论 3 118
  • 概述 因为健忘,加上对各种排序算法理解不深刻,过段时间面对排序就蒙了。所以决定对我们常见的这几种排序算法进行统一总...
    清风之心阅读 737评论 0 1
  • 稳定:如果a原本在b前面,而a=b,排序之后a仍然在b的前面;不稳定:如果a原本在b的前面,而a=b,排序之后a可...
    意识流丶阅读 3,228评论 2 9
  • 简单来说,时间复杂度指的是语句执行次数,空间复杂度指的是算法所占的存储空间 时间复杂度计算时间复杂度的方法: 用常...
    Teci阅读 1,141评论 0 1
  • 5月29号张秀宝日精进:今天算了一下业绩,还没有完成任务,没有上个月好呢!这个月就剩下两天,一定要好好干,不要掉以...
    京心达张秀宝阅读 103评论 0 0