我正在修读数据结构和大学课程。算法和MergeSort有些麻烦。我试图在网上看,但结果似乎不一致。
当涉及到正常的MergeSort和自上而下的MergeSort时 - 有什么区别?到目前为止我所读到的内容让我相信:
“普通”MergeSort只是将已排序的数组/文件拆分为一半,并将其放入辅助数组中。然后我们开始通过连续比较左边的元素和右边的元素来检查辅助阵列,将这些元素按顺序排列,然后再回到原始数组中。
自上而下的MergeSort递归地将未排序的数组拆分成较小的部分,直到我们得到一个大小为1(技术上已排序)的数组,直到两个原始的一半都被排序,然后应用“正常”的MergeSort来获得最终的阵列。
我很肯定我的理解是错误的 - 我在使用MergeSort时遇到了很多麻烦。有人可以为我澄清这个吗?
感谢。
答案 0 :(得分:1)
merge sort
的整个想法是使用divide and conquer方法对列表进行排序。
规则是你可以将右辅助数组的元素与左辅助数组仅进行比较,如果它们都被排序的话。当列表最初未排序时,我们可以保证我们的子数组被排序的唯一方法是它只有1个元素。此时我们开始merge
部分,它比较左右辅助数组中的元素,并将它们排序回主数组。
以下是我们merge sort
时所发生的事情的一个例子:
正如你所看到的,我们只有一半的数组,直到我们得到一个有保证的排序数组(只有1个元素),现在我们可以将子数组数组合并在一起,因为它们已经排序了。
如果你想了解更多关于它的信息,这里有一些很好的资料来源,但在我看来,你在概念上已经掌握了merge sort
应该做什么,你可能会把一些技术混淆起来一点。
答案 1 :(得分:1)
MergeSort最受欢迎的变体是自上而下,正如Nick Zuber详细描述的那样。
自下而上变体不会将整个数组划分为越来越小的部分。相反,它 在第一阶段合并长度为1的数组 在第二阶段合并长度为2的数组 在第三阶段合并长度为4的数组 等等,直到达到全长。
从第四行到结尾考虑尼克方案的线条 - 它们是自下而上排序的阶段。