知识大全 排序 - 归并排序(二)

Posted 文件

篇首语:莫道桑榆晚,为霞尚满天。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 排序 - 归并排序(二)相关的知识,希望对你有一定的参考价值。

  归并排序

  归并排序有两种实现方法 自底向上和自顶向下

   自底向上的方法

  ( ) 自底向上的基本思想

  自底向上的基本思想是 第 趟归并排序时 将待排序的文件R[ n]看作是n个长度为 的有序子文件 将这些子文件两两归并 若

  n为偶数 则得到

>个长度为 的有序子文件;若n为奇数 则最后一个子文件轮空(不

  参与归并) 故本趟归并完成后 前

>个有序子文件长度为 但最

  后一个子文件长度仍为 ;第 趟归并则是将第 趟归并所得到的

>个有

  序的子文件两两归并 如此反复 直到最后得到一个长度为n的有序文件为止

  上述的每次归并操作 均是将两个有序的子文件合并成一个有序的子文件 故称其为 二路归并排序 类似地有k(k> )路归并排序

  ( ) 二路归并排序的全过程

  【 参见动画演示 】

  ( ) 一趟归并算法

  分析

  在某趟归并中 设各子文件长度为length(最后一个子文件的长度可能小于length) 则归并前R[ n]中共有

>个有序的

  子文件 R

  [ length] R[length+ length] …

>

  注意

  调用归并操作将相邻的一对子文件进行归并时 必须对子文件的个数可能是奇数 以及最后一个子文件的长度小于length这两种特殊

  情况进行特殊处理

  ① 若子文件个数为奇数 则最后一个子文件无须和其它子文件归并(即本趟轮空);

  ② 若子文件个数为偶数 则要注意最后一对子文件中后一子文件的区间上界是n

  具体算法如下

  void MergePass(SeqList R int length)

   //对R[ n]做一趟归并排序

  int i;

  for(i= ;i+ *length <=n;i=i+ *length)

  Merge(R i i+length i+ *length );

  //归并长度为length的两个相邻子文件

  if(i+length

  Merge(R,i,i+length-1,n); //归并最后两个子文件

  //注意:若i≤n且i+length-1≥n时,则剩余一个子文件轮空,无须归并

   //MergePass

  (4)二路归并排序算法

  void MergeSort(SeqList R)

  //采用自底向上的方法,对R[1..n]进行二路归并排序

  int length;

  for(1ength=1;length 趟归并

  MergePass(R,length); //有序段长度≥n时终止

  

  注意:

  自底向上的归并排序算法虽然效率较高,但可读性较差。tW.winGwIT

cha138/Article/program/sjjg/201311/23777

相关参考

知识大全 排序 - 归并排序(一)

  归并排序(MergeSort)是利用归并技术来进行排序归并是指将若干个已排序的子文件合并成一个有序的文件  两路归并算法  算法基本思路  设两个有序的子文件(相当于输入堆)放在同一向量中相邻的位

知识大全 09年自考《数据结构》各章要点二[8]

  归并排序  ·先两个一组排序形成(n+)/组再将两组并一组直到剩下一组为止  ·归并排序是非就地稳定排序时间复杂度是O(nlogn)  分配排序  箱排序  ·按关键字的取值范围确定箱子数按关键字

知识大全 排序 - 归并排序(三)

  自顶向下的方法  采用分治法进行自顶向下的算法设计形式更为简洁  ()分治法的三个步骤  设归并排序的当前区间是R[lowhigh]分治法的三个步骤是  ①分解将当前区间一分为二即求分裂点  > 

知识大全 数据结构考研分类复习真题 第十章 排序[59]

  .设有N个记录的一个文件经内部排序后得到个初始归并段  ()试问在四台磁带机上分别用平衡归并和多步归并进行外部排序各需要多少趟归并?  ()给出多步归并排序前五趟归并的情况(分)【北方交通大学六(

知识大全 数据结构考研分类复习真题 第十章 排序[15]

  有一组数据()用堆排序的筛选方法建立的初始堆为(   )【南京理工大学二(分)】  A. B.  C. D.ABC均不对  归并排序中归并的趟数是

知识大全 数据结构考研分类复习真题 第十章 答案[9]

  从节省存储空间考虑先选堆排序再选快速排序最后选择归并排序  从排序结果的稳定性考虑选择归并排序堆排序和快速排序都是不稳定排序  从平均情况下排序最快考虑先选择快速排序  ()堆排序快速排序归并排序

知识大全 数据结构考研分类复习真题 第十章 排序[57]

  .给定个权值集合()画出含有个叶子结点的最佳三叉归并树并计算出wpl=?【东北大学一(分)】  类似本题的另外叙述有  ()假设有个初始归并段其长度分别为;现要作路外部归并排序试画出表示归并过程的

知识大全 数据结构 10.13 2-路归并排序算法演示

  希赛教育计算机专业考研专业课辅导招生  希赛教育计算机专业考研专业课辅导视频  希赛教育计算机考研专业课在线测试系统  voidMsort(RcdTypeSR[]RcdTypeTR[]intsin

知识大全 数据结构第七章(图)串讲+复习要点

  排序是组织数据最基本的运算排序的方法也很多本章给出了几种典型的排序方法见下表  排序类别插入排序交换排序选择排序归并排序分配排序  排序方法直接插入冒泡法直接选择*归并排序箱排序  希尔排序*快速

知识大全 数据结构考研分类复习真题 第十章 排序[16]

  .就排序算法所用的辅助空间而言堆排序快速排序归并排序的关系是(   )【西安交通大学三(分)】  A.堆排序〈 快速排序〈归并排序   B.堆排序