归并排序递归问题

来源:3-2 归并排序法的实现

慕粉1330426222

2019-04-28

  • (void)mergearr:(NSMutableArray*)array left:(int)left right:(int)right{
    if (left >= right) {
    return;
    }
    int center = (left + right)/2;
    [self mergearr:array left:left right:center];
    [self mergearr:array left:center+1 right:right];
    [self megearrSort:array left:left center:center right:right];//合并
    }
    请问老师 [self megearrSort:array left:left center:center right:right];这句代码没有递归为什么会一直合并呢
写回答

1回答

liuyubobobo

2019-04-28

不是这句代码在一直合并,是mergearr这个递归函数在一值调用这个函数。所以mergearr在不断地被调用,megearrSort就在不断地被调用:)


对于一个小测试数据集,比如8个元素,你先思考一下,megearrSort会被调用几次?为什么?然后,再使用单步跟踪的方式,实际看一下,megearrSort被调用了几次?都是在什么时候被调用的?和你的设想一样不一样?如果不一样,哪里不一样?最初的设想,哪里有问题?


不要怕麻烦,进步就发生在这个过程中哦:)


及亚欧!:)

0
2
liuyubobobo
回复
慕粉1330426222
抱歉,因为评论里没有格式,我看起来太不方便了。我理解你实际跟踪调试的结果和你自己的设想有出入,并且你还有问题?如果是那样的话,请再把这些内容,包括你的详细问题描述放到一个新的问答中,方便我看一下。谢谢:)
2019-04-28
共2条回复

算法与数据结构(C++版) 面试/评级的算法复习技能包

课程专为:短时间内应对面试、升职测评等艰巨任务打造

11187 学习 · 1614 问题

查看课程