合并排序

 

  合并排序算法是用分治策略实现对n个元素进行排序的算法。

  其基本思想是:待排序元素分成大小大致相同的两个集合,分别对两个子集合进行排序,最终将排好序的子集合合并成所要求的排好序的集合。

 

合并排序

  合并排序算法可递归地描述如下:

/**b[l:r]复制到a[l:r]中 **/
void copy(int a[],int b[],int l,int r)
{
    for(; l<=r; l++)
        a[l]=b[l];
}

void MergeSort(int a[],int left,int right)
{
    if(left<right)   //至少有2个元素
    {
        int b[N];
        int i=(left+right)/2; // 取中点
        MergeSort(a,left,i);
        MergeSort(a,i+1,right);
        Merge(a,b,left,i,right);    //合并到数组b
        copy(a,b,left,right);       //复制回数组
    }
}

  其中,函数Merge用于合并相邻数组段。

/**
对两个已排序的数组进行合并排序。
合并c[l:m]和c[m+1:r]到d[l:r]
**/
void Merge(int c[],int d[],int l,int m,int r)
{
    int i =l,j=m+1,k=l;
    while((i<=m)&&(j<=r))
        if(c[i]<=c[j])d[k++]=c[i++];
        else d[k++]=c[j++];
    if(i>m)for(int q=j; q<=r; q++) d[k++]=c[q];
    else for(int q=i; i<=m; i++) d[k++]=c[q];
}

 

 

 

 

 

 

转载于:https://www.cnblogs.com/dztgc/archive/2013/04/20/3032968.html