## 小木学习笔记---Advanced sorting algorithms(1)merge sort 归并排序

小明学习笔记–数据结构与算法(Java)-Advanced sorting algorithms(1)merge sort 归并排序

learning objectives

  • divide-and-conquer strategy(归并思想)
  • pseudocodes and time complexity(伪代码与时间复杂度)
  • apply
    PS: 本文是根据老师PPT和其他博主,结合自己的理解写的。如有失误,还望指教。

归并排序过程解析what is the merge sort?

归并排序是基于分治与递归(divide-and-conquer)的思想的。
主要过程是首先将数据不断对半划分(分治divide)直到称为最小的有序数据单元(0/1个元素)。
再通过递归将最小的两个有序数据单元“排序”并“合并”成大一层级的有序数据单元(这两个较小一层级的有序单元必须是之前划分的过程中,从同一个上一层级划分出来的)
不断递归将两个同级的有序数据单元,排序并合并后,得到原有长度的目标有序序列。

在这里插入图片描述

两个有序数据单元排序并合并的方法论

A,B为两个排好序的数据单元,拿出A,B中第一个元素进行比较,较小的元素放到新的数组(队列)C中(A,B,C 有点类似于“队列”?),同时将这个元素从队列A/B中去除(object dequeue)。(如果是C语言的话可以通过改变指针的位置实现?)
再比较队列A,B中第一个位置的元素大小,较小的元素放到数组C的下一个位置中。直到队列A/B其中一个为空(boolean isEmpty()?,把最后一个元素放到C中,合并结束。

merge sort is based on divide-and-conquer paradigm.

divide-and-conquer分治思想

可以理解为一种非常智慧的目标达成方法。
划分divide :想要达成一个大的目标,先将大的目标拆解成精细的小目标。
**治理conquer :**将小的目标一件一件达成,从而实现短期目标,中期目标,最后达到终极目标。

对于规模较大的问题,可以分解成若干容易求解的简单的问题,最后把解合并构成初始问题的解。
这个思想用在归并排序算法上就是3部曲
1.divide:把数据分成2个半子集(divide the input data S in two disjoint subsets S! and S2)
2.recur: 分别解决两个子问题(solve the subproblem associated with S1 and S2)
3.Conquer: 结合两个子问题的解决结果从而解决大问题(combine the solutions for S1 and S2 into a solution for S)

the base case for the recursion are subproblem of size 0 or 1.
伪代码如下
伪代码实现

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值