gpt4 book ai didi

algorithm - 理解归并排序的递归

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:17:43 24 4
gpt4 key购买 nike

我看到的大多数归并排序实现都与此类似。算法书的介绍以及我搜索的在线实现。我的递归印章并没有比搞乱斐波那契生成(这很简单)更进一步,所以也许是多重递归让我大吃一惊,但我什至无法单步执行代码并理解发生了什么,甚至在我点击之前合并函数。

它是如何逐步解决这个问题的?我应该采取一些策略或阅读以更好地理解这里的过程吗?

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);
}
}

和合并(尽管坦率地说,在我到达这部分之前我已经精神崩溃了)

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];
}

最佳答案

合并排序:

1) 将数组分成两半
2) 对左半部分进行排序
3) 对右半部分进行排序
4) 将两半合并在一起

enter image description here

enter image description here

关于algorithm - 理解归并排序的递归,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19072004/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com