个人主页:C++忠实粉丝
欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 C++忠实粉丝 原创分治算法(5)_归并排序_排序数组
收录于专栏【经典算法练习】
本专栏旨在分享学习算法的一点学习笔记,欢迎大家在评论区交流讨论💌
目录
1. 归并排序简介
分治思想:
分(Divide):将待排序数组分成两半,递归地对每一半进行归并排序。
治(Conquer):当子数组的大小为1时,数组自然是有序的。
合(Combine):将两个已排序的子数组合并成一个排序好的数组。
归并排序的步骤:
分割:将数组不断分割,直到每个子数组只包含一个元素。
合并:将相邻的两个子数组合并成一个排序后的数组。合并的过程需要一个辅助数组来存放合并结果。
归并排序的时间与空间复杂度
时间复杂度
最佳情况:O(n log n)
平均情况:O(n log n)
最坏情况:O(n log n)
归并排序的时间复杂度在所有情况下都是 O(n log n),因为它的合并过程总是需要遍历所有元素,而分割的深度是 log n。
空间复杂度
空间复杂度:O(n)
归并排序需要额外的空间来存储合并后的数组,因此其空间复杂度是 O(n)。
归并排序的优缺点:
优点
稳定性:归并排序是一种稳定的排序算法,即相同元素的相对位置不会改变。
适用性广:对于大规模数据集或链表等数据结构,归并排序表现良好。
并行性:归并排序容易实现并行化,适合在多处理器环境中运行。
缺点
额外空间开销:需要 O(n) 的额外空间来存储合并结果&