知识大全 排序 - 归并排序(三)
Posted 区间
篇首语:枕上从妨一夜睡,灯前读尽十年诗。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 排序 - 归并排序(三)相关的知识,希望对你有一定的参考价值。
自顶向下的方法
采用分治法进行自顶向下的算法设计 形式更为简洁
( )分治法的三个步骤
设归并排序的当前区间是R[low high] 分治法的三个步骤是
①分解 将当前区间一分为二 即求分裂点
>
②求解 递归地对两个子区间R[low mid]和R[mid+ high]进行归并排序;
③组合 将已排序的两个子区间R[low mid]和R[mid+ high]归并为一个有序的区间R[low high]
递归的终结条件 子区间长度为 (一个记录自然有序)
( )具体算法
void MergeSortDC(SeqList R int low int high)
//用分治法对R[low high]进行二路归并排序
int mid;
if(low
mid=(low+high)/2; //分解
MergeSortDC(R,low,mid); //递归地对R[low..mid]排序
MergeSortDC(R,mid+1,high); //递归地对R[mid+1..high]排序
Merge(R,low,mid,high); //组合,将两个有序区归并为一个有序区
//MergeSortDC
(3)算法MergeSortDC的执行过程
算法MergeSortDC的执行过程如下图所示的递归树。tW.WIngwiT.
>
二、算法分析
1、稳定性
归并排序是一种稳定的排序。
2、存储结构要求
可用顺序存储结构。也易于在链表上实现。
3、时间复杂度
对长度为n的文件,需进行
>趟二路归并,每趟归并的时间为O(n),故其时间复杂度无论是在最好情况下还是在最坏情况下均是O(nlgn)。
4、空间复杂度
需要一个辅助向量来暂存两有序子文件归并的结果,故其辅助空间复杂度为O(n),显然它不是就地排序。
注意:
若用单链表做存储结构,很容易给出就地的归并排序。具体【参见练习】。
cha138/Article/program/sjjg/201311/23775相关参考