相关疑难解决方法(0)

理解mergesort的递归

我看到的大多数mergesort实现与此类似.算法书介绍以及我搜索的在线实施.我的递归方法并没有比弄乱Fibonacci一代(这很简单),所以也许是多次递归让我大吃一惊,但是我甚至无法介绍代码并理解甚至在我击中之前发生了什么合并功能.

如何踩过这个?我应该采取一些策略或阅读来更好地理解这里的过程吗?

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

和合并(虽然坦率地说,在我到达这一部分之前,我在精神上陷入困境)

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];
}
Run Code Online (Sandbox Code Playgroud)

algorithm recursion merge mergesort

20
推荐指数
4
解决办法
4万
查看次数

标签 统计

algorithm ×1

merge ×1

mergesort ×1

recursion ×1