我有一些问题。在我阅读Sedgewick和Wayne的书中,我找到了一些我无法理解的句子。他们写: - “首先,我们做了两个 在处理整个数组之前递归调用[他们谈论MergeSort];在第二个实例中,我们在处理整个数组之后进行了两次递归调用[他们讲的是QuickSort]。“ 可能有人向我解释这两句话的完整概念。 最诚挚的问候!
答案 0 :(得分:3)
它指的是Merge和QuickSort使用的分而治之策略中的工作顺序。
具体来说,MergeSort将工作分成较小的块并进行递归调用,然后将两个结果合并在一起。在执行合并步骤之前,它会递归递归。
QuickSort首先找到一个数据透视并通过交换元素来执行分区,然后将工作分成更小的块并进行递归调用。它在执行分区步骤之后递归地称为。
答案 1 :(得分:1)
句子不必要地混淆。实际上,两种算法都以完全相同的方式工作:它们A.准备工作的子问题,B.处理子问题,递归调用self,以及C.将解决方案与子问题结合起来,形成完整问题的完整解决方案。 / p>
在mergesort中,通过将输入列表分成两半来准备子问题。
在快速排序中,通过将输入数组分成两个部分来找到它们,这两个部分包含的值比较小,而且不小于选定的轴。
mergesort的重组步骤正在合并。
快速排序的重组步骤是无操作,即无所事事,因为排序是在就地,在相同的数组上完成的。
恰巧,对于mergesort,最后一步更为实际,而对于quicksort - 第一步。