排序算法4--归并排序

原创 2007年09月16日 01:03:00
 前面3种排序算法都是简单的排序,效率不高,这里给出一个稍微复杂一点的排序算法,归并排序。分为两步,一是划分待排序数据,二是归并划分的子序列,归并排序是一个递归过程。

template <class T>
void merge(T *Array, int First, int Mid, int Last)
{
    T 
*temp = new T[Last - First + 1];
    assert(temp 
!= NULL);
    
    
int indexA = First;
    
int indexB = Mid + 1;
    
int indexT = 0;

    
while (indexA <= Mid && indexB <= Last)
        temp[indexT
++= (Array[indexA] < Array[indexB]) ? Array[indexA++] : Array[indexB++];

    
while (indexA <= Mid)
        temp[indexT
++= Array[indexA++];

    
while (indexB <= Last)
        temp[indexT
++= Array[indexB++];

    indexA 
= First;
    
for (indexT = 0; indexT <= Last-First; indexT++, indexA++)
        Array[indexA] 
= temp[indexT];

    delete [] temp;
}


template 
<class T>
void merge_sort(T *Array, int First, int Last)
{
    
int mid;

    
if (First < Last)
    
{
        mid 
= (First + Last) / 2;
        merge_sort(Array, First, mid);
        merge_sort(Array, mid
+1, Last);
        merge(Array, First, mid, Last);
    }

}

相关文章推荐

递归归并排序算法

  • 2017年11月02日 22:33
  • 2KB
  • 下载

归并排序算法

  • 2013年10月27日 09:56
  • 5KB
  • 下载

排序算法总结(4)——归并排序

归并排序的思想是把一个数组分成两半,排序每一半,然后把数组的两半归并成一个有序数组。 运用递归的方法,把每一半都分成两个四分之一,对每个四分之一排序,然后归并成有序的一半。 以此类推,反复的分割数组,...
  • kakascx
  • kakascx
  • 2016年06月19日 03:22
  • 109

归并排序算法代码实现

  • 2012年11月15日 19:20
  • 2KB
  • 下载

归并排序-递归的应用-面试的小难点

归并排序(Merge)是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,每个子序列是有序的。然后再把有序子序列合并为整体有序序列。归并排序是建立在归并操作上的一种有效的...

归并排序算法程序模拟

  • 2017年03月30日 23:47
  • 36KB
  • 下载

归并排序-java实现

/** * 归并排序:采用分治法 * * @author timmy1 归并排序是将一个无序的元素序列,先进行分解成只有一个数据元素的序列. 再将两个相邻的元素序列进行合并,合并后还要是有序的. *...

归并排序算法

  • 2011年11月03日 10:23
  • 15KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:排序算法4--归并排序
举报原因:
原因补充:

(最多只允许输入30个字)