设为首页 加入收藏

TOP

排序算法系列之合并排序(五)
2013-09-26 20:01:20 来源: 作者: 【 】 浏览:598
Tags:排序 算法 系列 合并

 

  (2)具体算法

  [cpp]

  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

  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的执行过程如下图所示的递归树。

  归并排序示例: 自顶向下的二路归并的执行过程

  三 算法整体过程演示

  一个归并排序的例子:对一个随机点的链表进行排序:

\

  四 算法性能分析

  1、稳定性

  归并排序是一种稳定的排序。

  2、存储结构要求

  可用顺序存储结构。也易于在链表上实现。

  3、时间复杂度

  对长度为n的文件,需进行 趟二路归并,每趟归并的时间为O(n),故其时间复杂度无论是在最好情况下还是在最坏情况下均是O(nlgn)。

  4、空间复杂度

  需要一个辅助向量来暂存两有序子文件归并的结果,故其辅助空间复杂度为O(n),显然它不是就地排序。

 

        

首页 上一页 2 3 4 5 6 7 下一页 尾页 5/7/7
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇C++一维数组和指针的关系总结 下一篇C++ 程序员自信心曲线图

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: