排序——归并排序技术

   归并排序的思想是将几个相邻的有序表合并成一个总的有序表,下面主要讨论二路归并排序。

  1、两个有序表的合并

    二路归并排序的基本操作是将两个相邻的有序表合并为一个有序表。下面是将两个顺序存储的有序表合并为一个有序表的算法:

    设两个有限子表R[s]……R[m]和R[m+1]……R[t],将两个有序子表合并为一个有序表R1[s]……R1[t]。合并算法如下:

      

    要注意:该合并算法要求两个有限子表是相邻的,即R[s]……R[m]和R[m+1]……R[t]。

  2、二路归并排序的迭代算法

    二路归并的基本思想是:只有一个元素的表总是有序的,所以将排序表R[1……n],看做是n个长度为len=1的有序子表,对相邻的两个有序子表两两合并到R1[1……n],使之生成表长len=2的有序表;再进行两两合并到R[1……n]中,……,直到最后生成表长len=n的有序表。

    每趟排序中首先要解决分组的问题,设本趟排序中从R[1]开始,长度为len的子表有序,因为表长n未必是2的整数幂,这样最后一组就不能保证恰好是表长为len的有序表也不能保证每趟归并时都有偶数个有序子表,这些都要在一趟排序中考虑到。

    例:有排序表36 20 18 10 60 25 30 18 12 56,归并排序过程如下图示:

      

    一趟归并算法:

       

    二路归并排序:

       

  3、二路归并排序的递归算法

       

 

posted on 2022-02-14 09:55  池塘里洗澡的鸭子  阅读(60)  评论(0编辑  收藏  举报