常闲排序算法,也即归并排序(Merge Sort),是一种采用分治策略的排序算法。它通过不断将待排序序列划分为若干个子序列,对每个子序列进行排序,并将已排序的子序列合并为整体有序序列,从而达到排序的目的。归并排序以其稳定的排序特性和O(nlogn)的时间复杂度在排序算法中占据重要地位。
归并排序的基本思想
归并排序的基本思想是将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为2-路归并。
归并排序可以分为两个主要步骤:
分解:将数组分解成两个较小的子数组,直到子数组的大小为1。此时,每个子数组都视为有序。
递归合并:递归地将已排序的子数组合并成一个大的有序数组,直到合并为1个完整的数组。
归并排序的实现
以下是使用C++语言实现归并排序的代码,并对代码进行详细讲解。
代码讲解
merge 函数:
left 和 mid 是待合并左半部分的起始和结束索引。
mid + 1 和 right 是右半部分的起始和结束索引。
创建一个临时数组 temp 来暂存合并的结果。
通过两个指针 i 和 j 分别遍历左右两个子数组,将较小的元素依次放入 temp 数组。
将剩余的元素(如果有)也放入 temp 数组。
最后,将 temp 数组中的元素复制回原数组 arr 中对应的位置。
mergeSort 函数:
递归地调用自身,将数组分为左右两部分进行排序。
调用 merge 函数将已排序的子数组合并成一个大的有序数组。