首页 > 编程语言 > 详细

归并排序

时间:2019-07-12 18:50:02      阅读:126      评论:0      收藏:0      [点我收藏+]

o(nlogn)

核心思想:分治。

技术分享图片

 

当我们要排序这样一个数组的时候,归并排序法首先将这个数组分成一半。如图:

技术分享图片

然后想办法把左边的数组给排序,右边的数组给排序,之后呢再将它们归并起来。当然了当我们对左边的数组和右边的素组进行排序的时候,再分别将左边的数组和右边的数组分成一半,然后对每一个部分先排序,再归并。如图:

技术分享图片

对于上面的每一个部分呢,我们依然是先将他们分半,再归并,如图:

技术分享图片

分到一定细度的时候,每一个部分就只有一个元素了,那么我们此时不用排序,对他们进行一次简单的归并就好了。如图:

技术分享图片

归并到上一个层级之后继续归并,归并到更高的层级,如图:

技术分享图片

直至最后归并完成。

技术分享图片

我们可以开辟一个临时数组来辅助我们的归并。也就是说他比我们插入排序也好,选择排序也好多使用了存储的空间,也就是说他需要o(n)的额外空间来完成这个排序。

整体来讲我们要使用三个索引来在数组内进行追踪。

技术分享图片

蓝色的箭头表示最终选择的位置,而红色的箭头表示两个数组当前要比较的元素,比如当前是2与1比较,1比2小,所以1放到蓝色的箭头中,蓝色的箭头后移,1的箭头后移。

技术分享图片

然后2与4比较,2比4小那么2到蓝色的箭头中,蓝色箭头后移,2后移,继续比较.......

 

归并排序

原文:https://www.cnblogs.com/pacino12134/p/11177733.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!