【发布时间】:2015-06-28 04:39:27
【问题描述】:
问题:Mergesort 将一个数字列表分成两半,并在这两部分上递归调用自身。相反,您可以在左半边执行快速排序并在右半边执行合并排序吗?如果是,请通过显示每个步骤来显示它将如何对以下数字列表进行排序。如果不是,请解释为什么不能。
我应该使用合并排序对数字列表进行排序。使用快速排序将左半部分排序在哪里?
我想通了。 答:是的,我们可以
- 使用归并排序对数组的右半部分进行排序。
- 使用快速排序对左半部分进行排序。
- 使用merge_sort的合并函数合并2。
【问题讨论】:
-
假设您计划在完成后合并“左半部分”和“右半部分”,您使用哪种排序算法有什么关系(您是否尝试使用就地快速排序来节省空间?)。并且快速排序和合并排序都可以在 C 中轻松实现,只需使用基指针和序列长度作为参数。创造性的指针算法会以最小的努力消除一个索引(低索引)。我完全有可能误解了你提出的问题,如果是这样,也许澄清一下你实际上试图做什么?
-
我更新了问题。我也从你的回复中发现,我可以在对它们进行排序后合并两半。谢谢。
标签: sorting language-agnostic quicksort mergesort