La compréhension de la Récursivité de mergesort

La plupart des mergesort implémentations je vois sont similaires à ce. introduction aux algorithmes livre avec en ligne implantations je recherche. Mon récursivité côtelettes de ne pas aller beaucoup plus loin que de jouer avec de Fibonacci génération (qui a été assez simple) donc c'est peut-être le plusieurs récurrences souffler mon esprit, mais je ne peux même pas parcourir le code, et comprendre ce qui se passe avant même que j'ai même frappé la fonction de fusion.

Comment est-il pas à pas dans cette? Est-il une stratégie ou de lecture que je devais subir de mieux comprendre le processus ici?

void mergesort(int *a, int*b, int low, int high)
{
    int pivot;
    if(low<high)
    {
        pivot=(low+high)/2;
        mergesort(a,b,low,pivot);
        mergesort(a,b,pivot+1,high);
        merge(a,b,low,pivot,high);
    }
}

et de la fusion(bien franchement, je suis mentalement bloqué avant même d'arriver à cette partie)

void merge(int *a, int *b, int low, int pivot, int high)
{
    int h,i,j,k;
    h=low;
    i=low;
    j=pivot+1;

    while((h<=pivot)&&(j<=high))
    {
        if(a[h]<=a[j])
        {
            b[i]=a[h];
            h++;
        }
        else
        {
            b[i]=a[j];
            j++;
        }
        i++;
    }
    if(h>pivot)
    {
        for(k=j; k<=high; k++)
        {
            b[i]=a[k];
            i++;
        }
    }
    else
    {
        for(k=h; k<=pivot; k++)
        {
            b[i]=a[k];
            i++;
        }
    }
    for(k=low; k<=high; k++) a[k]=b[k];
}
InformationsquelleAutor 2c2c | 2013-09-28