视频字幕
归并排序是一种经典的分治算法,它的时间复杂度为O(n log n)。核心思想是分而治之:首先将数组分解成更小的子数组,然后递归地对这些子数组进行排序,最后将已排序的子数组合并成一个完整的有序数组。
分解阶段是归并排序的第一步。我们从原始数组开始,不断地将数组从中点分成两半。首先将8个元素的数组分成两个4元素的子数组,然后继续分解,直到每个子数组只包含一个元素。整个分解过程需要log n层,对于8个元素就是3层。
合并阶段是归并排序的核心。我们有两个已排序的子数组,左边是3和8,右边是4和5。使用两个指针分别指向两个子数组的开头,比较指针指向的元素,选择较小的放入结果数组。首先比较3和4,3更小,所以3进入结果。然后比较8和4,4更小,4进入结果。继续这个过程直到所有元素都被合并。
现在让我们看完整的归并排序过程。从原始数组8、3、5、4、7、6、1、2开始,首先递归分解到单个元素。然后从底层开始合并:3和8合并成3、8,4和5合并成4、5,以此类推。接着合并更大的子数组:3、8和4、5合并成3、4、5、8,6、7和1、2合并成1、2、6、7。最后将两个四元素的有序数组合并,得到完全排序的结果1、2、3、4、5、6、7、8。
总结一下归并排序的特点:它采用分治策略,将问题分解为更小的子问题。时间复杂度始终为O(n log n),无论最好、最坏还是平均情况。空间复杂度为O(n),因为需要额外的存储空间来合并数组。归并排序是稳定的排序算法,适用于大数据集和外部排序场景。