归并排序算法 C++实现与时间复杂度(考过)恋上数据结构笔记

复习梗概

  1. 画图,自己整个数组,看代码写步骤,这个对理解归并排序还是很有必要的
  2. 合并两个有序数组的merge函数写法
  3. 时间复杂度的分析方法!!!
  4. 其实我觉得去b站找个动态的步骤分解视频也是不错的复习方法,当然要自己先回想

归并排序特点

  1. 稳定,快速
  2. 递归调用,分治思想
  3. 合并两个有序数组的思想
  4. 时间复杂度O(nlogn),这个时间复杂度的分析方法很重要一定要掌握

归并排序时间复杂度分析(某校知能情报考过)

恋上数据结构笔记 归并排序与时间复杂度
这个图可能会很有用
在这里插入图片描述
图片来自:恋上数据结构结构与算法第二季-李明杰老师


归并排序本体函数

从输出也能大致看出来归并排序的归并顺序,每次merge都会打印一次数组
在这里插入图片描述
图片来自:恋上数据结构结构与算法第二季-李明杰老师

void mergeSort(vector<int> &array, int begin, int end)
{
   
    //有点类似树的递归访问,每次调用都把当前数组一分为二,直到不可再分就return,两个都return后,merge成一个有序数组,再不断往回merge成有序数组
    if (end - begin + 1 < 2)
    {
   
        return;
    }
    int mid = (begin + end) / 2;
    mergeSort(array, begin, mid);
    mergeSort(array, mid+1, end);
    merge(array, begin, end);
    vectorPrint(array);
}
输入数组:
6 9 3 1 2 0 8 29 15 11 10
归并排序基础版
6 9 3 1 2 0 8 29 15 11 10
3 6 9 1 2 0 8 29 15 11 10
3 6 9 1 2 0 8 29 15 11 10
3 6 9 0 1 2 8 29 15 11 10
0 1 2 3 6 9 8 29 15 11 10
0 1 2 3 6 9 8 29 15 11 10
0 1 2 3 6 9 8 15 29 11 10
0 1 2 3 6 9 8 15 29 10 11
0 1 2 3 6 9 8 10 11 15 29
0 1 2 3 6 8 9 10 11 15 29
算法用时:(微秒)
[AlgoTime: 20007 us]
输入数组:
6 9 3 1 2 0 8 29 15 11 10
归并排序归并换个写法
6 9 3 1 2 0 8 29 15 11 10
3 6 9 1 2 0 8 29 15 11 10
3 6 9 1 2 0 8 29 15 11 10
3 6 9 0 1 2 8 29 15 11 10
0 1 2 3 6 9 8 29 15 11 10
0 1 2 3 6 9 8 29 15 11 10 
0 1 2 3 6 9 8 15 29 11 10
0 1 2 3 6 9 8 15 29 10 11
0 1 2 3 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值