我不明白这一步,尤其是在mergesort中

时间:2016-10-06 15:57:38

标签: c recursion mergesort

在上面的代码中,我不明白这一点。它再次调用合并排序但是当合并重新调用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}}

1 个答案:

答案 0 :(得分:0)

它位于评论 recurse 之下,并在逐行评论中被提及。您重复 merge_sort 以对数组的左侧部分(右侧部分)进行排序。然后你打电话给合并以重新组合它们,现在按顺序。

永远调用 merge_sort :注意merge_sort顶部的基本情况(a.k.a.终止条件):

if( start >= end) return;

当您到达不超过一个元素的列表时,您只需返回 - 它已经按顺序排列。然后你爬回那个大的调用链,合并单个元素,然后是更大的列表,......直到你完成。