作者:cocoC陳靜雯具_606 | 来源:互联网 | 2024-10-24 14:59
本文深入探讨了C++中归并排序的实现与应用,详细解析了分治算法的核心思想。文章首先介绍了归并排序的基本原理,包括如何进行递归分割和合并操作,并详细讲解了递归终止条件的设定。随后,通过完整的代码示例,展示了归并排序的具体实现过程。此外,还对比了归并排序与其他排序算法的优劣,帮助读者更好地理解和应用这一高效排序方法。
hello?
昨天发了个堆排序,竟然上了热榜
所以,今天来发一下归并排序
上次的堆排序似乎好多人没看懂,其实这些还是比较基础滴?
废话不多说,直接进入正题
分治算法
如果你要学归并排序,首先你要学一下分治
所谓分治,就是分开治理,把大问题化成小问题,逐个解决,再合到一起
这也就是归并排序的精髓
这种算法时间复杂度低,原理也比较简单
归并排序
首先来看这张图
图片中把一个数组分成了一个一个的元素,在合并的过程中排序
怎么分
分的方法其实很简单,一个递归就可以解决
如果你是初学者,可能没有完全把递归学透彻
简单说,递归就是在函数内部调用自己的函数
递归都要有一个出口,否则就会变成死循环
递归的出口
我们在函数参数上写1)一个数组(要被排序的数组)2)分的开始和结束(first和end)
如果first
还要定义一个中间,前面那行代码是分左边,也就是开始~中间,后面那行代码是分右边,也就是中间+1~末尾
void merge_sort(int array[],int first,int end)
{
if(first
“并”的实现
按照上面的图片,我们每排一下序就给它并一下
具体代码实现
void merge(int array[],int first,int center,int end)
{
int n1 = center - first + 1;
int n2 = end - center;
int L[n1+1];
int R[n2+1];
for(int i = 0; i
加到“分”函数里
因为我们分完了要并,所以我们把“并”函数写进“分”函数里
void merge_sort(int array[],int first,int end)
{
if(first
完整代码
加上int main()就行
#include
using namespace std;
/*
* 打印数组
*/
void printArray(int array[],int length)
{
for (int i = 0; i