归并排序

#include<stdio.h>
void Merge(int arr[],int L,int M,int R)
{
    int LeftSize=M-L;
    int RightSize=R-M+1;
    int Left[LeftSize];
    int Right[RightSize];
    
    /*1.fill in the left sub array*/
    int i;
    for(i=L;i<M;i++)
    {
        Left[i-L]=arr[i];
    }
    /*2. full in the right sub array*/
    int j;
    for(j=M;j<=R;j++)
    {
        Right[j-M]=arr[j];
    }
    
    int k;
    i=0;j=0;k=L;/*注意:K=L不是K=0*/
    
    while(i<LeftSize&&j<RightSize)
    {
        if(Left[i]<Right[j])
        {
            arr[k]=Left[i];
            i++;
            k++;
        }else
        {
            arr[k]=Right[j];
            j++;
            k++;
        }
    }
    
    while(i<LeftSize)
    {
        arr[k]=Left[i];
        i++;
        k++;
    }
    while(j<RightSize)
    {
        arr[k]=Right[j];
        j++;
        k++;
    }
    return ;
}

void MergeSort(int arr[],int L,int R)
{
    if(L==R)
    {
        return;
    }else
    {
        int M=(L+R)/2;
        MergeSort(arr,L,M);
        MergeSort(arr,M+1,R);
        Merge(arr,L,M+1,R);
    }
}
原文地址:https://www.cnblogs.com/angury/p/13022366.html