Merger Sort 的复杂度是O(N*logN),那它究竟是怎么把时间复杂度给缩小了呢,笔者感觉精髓就在于它省去了一部分多余的比较操作,并不像选择排序和冒泡排序这些算法,无论数据分布状况如何,都会执行固定的比较操作次数,当然了,插入排序会收到数据分布状况的影响,但最坏情况下的复杂度也和选择排序和冒泡排序是一样的。

首先来看一下归并排序的算法简略图:

归并排序理解_数组

 

归并排序理解_数组_02

整个过程中,需要开辟一个辅助数组来存放排好序的元素,最后需要复制回原数组里去,P1和P2指针谁小就放进辅助数组中,然后res指针后移,直到数组中P1,P2指针中有一个指针到末尾了,就将另一个数组中的元素全部复制到辅助数组中。

相关的扩展问题有小和问题和逆序对问题。