在上面的代码中,我不明白这一点。它再次调用合并排序但是当合并重新调用mergesort时合并 但什么时候合并发生 我无法理解的代码是递归的,即在分成两半并重复调用mergesort并打破inrtoa单个元素合并之后如何发挥作用。 真正的问题是如何真正进入游戏
/* recurse */
merge_sort(arr,start, mid); /* first half */
merge_sort (arr, mid+1, end); /* second half */
merge (arr, start, mid, end); /* do the merging */
块引用
在上面的代码中,我不明白这一点 它再次调用合并排序但是当合并重新调用mergesort
时合并{{1}}
答案 0 :(得分:0)
它位于评论 recurse 之下,并在逐行评论中被提及。您重复 merge_sort 以对数组的左侧部分(右侧部分)进行排序。然后你打电话给合并以重新组合它们,现在按顺序。
你不永远调用 merge_sort :注意merge_sort顶部的基本情况(a.k.a.终止条件):
if( start >= end) return;
当您到达不超过一个元素的列表时,您只需返回 - 它已经按顺序排列。然后你爬回那个大的调用链,合并单个元素,然后是更大的列表,......直到你完成。