一、算法原理
归并排序(Merge Sort)是一种基于分治法(Divide and Conquer)的排序算法,核心思想是将数组逐步拆分为子数组,排序后再合并。其时间复杂度为O(n log n),是稳定的排序算法。
1 )分解:将数组递归拆分为最小单元(单个元素)。
2)合并:将相邻有序子数组合并为一个有序数组,直到全部合并。
二、分步演示(数组[6 5 7 8 2])
原始数组:[6 5 7 8 2]
1 分解过程
1)第1层分解:
[6 5 7] 和[8 2]。
2)第2层分解左半部分 [6 5 7]
[6 5] 和[7]。
3)第2层分解右半部分 [8 2]
[8] 和[2]。
4)第3层分解左半部分 [6 5]
[6]和[5]。
2 合并过程
1)合并 [6]和 [5] → [5 6]。
2) 合并 [5 6] 和 [7] → [5 6 7]。
3) 合并右半部分 [8] 和[2]→ 合并为 [2 8]。
4)最终合并 [5 6 7] 和 [2 8]→ [2 5 6 7 8]。
三、C++代码实现
#include <iostream>
#include <vector>
using namespace std;
// 合并两个有序子数组
void merge(int arr[], int start, int mid, int en