- 5
- 0
- 约1.77千字
- 约 5页
- 2017-02-01 发布于北京
- 举报
Merge-Sort归并排序
Merge-Sort归并排序 基本思想 大名鼎鼎的归并排序,基本思想是分治。时间复杂度低,但耗费空间(额外空间最少O(n))。 想把一个长度为n的数列用归并排序方法排成从小到大排列,主要过程分三步: 分:把长度为n的数列分成长度为n/2的两个数列 治:分别对两个子数列进行排序 合:将排序好的两个长度为n/2的子数列合并起来 其中合并这一步是在最底部进行的,n分为n/2,n/2分为n/4...直到分到不能再分,开始从底部向上合并,大概这也是分治与递归最大的区别之一吧。下图以数列[5,2,4,7,1,3,2,6]为例,图示过程: 下面是合并这一步的为代码,其中A是带排序数列,子数列A[p,q]长度为n1,子数列A[q+1,r]长度为n2,显然p=q=r,A的总长度为r-p+1,L数列为子数列A[p,q],R数列为子数列A[q+1,r],之所以在L和R的末尾分别加上一项无穷大,是为了方便之后合并时的比较。显而易见,合并这一步的复杂度为O(n) 。 图解: 完整的归并排序伪代码见下,Merge-Sort函数调用自身,将数列不断分为两部分,直到p等于r,也就是自数列长度仅为1,然后开始执行Merge函数合并,并在之后返回之前的Merge-Sort函数完成最后一步Merge。 时间复杂度 还是这张图,可以看出,一共有logn层,每一层合并的复杂度为O(n) ,也就是 T(n) = 2T(n/2
原创力文档

文档评论(0)