想以不同的方式实现合并排序算法

时间:2012-03-01 20:28:13

标签: algorithm sorting language-agnostic mergesort

合并排序将列表划分为最小单位(1个元素),然后将每个元素与相邻列表进行比较以对两个相邻列表进行排序和合并。最后,对所有元素进行排序和合并。 我想以这样的方式实现合并排序算法,即它将列表分成两个元素的最小单元,然后对它们进行排序和合并。 ? 我该如何实现???

MERGE-SORT(A,p,r)

  1. IF p< r //检查基本情况
  2. 然后q = FLOOR [(p + r)/ 2] //除以步骤
  3. MERGE(A,p,q)//征服一步。
  4. MERGE(A,q + 1,r)//征服步骤。
  5. MERGE(A,p,q,r)//征服一步。
  6. 像p< p< p< r + 1。

1 个答案:

答案 0 :(得分:1)

我之前做过一些听起来像这样的事情。以下是两种变体。

变体1:浏览列表,对每一对进行排序。然后浏览列表,合并每对对。然后每对4s,依此类推。当你合并整个列表时,你已经完成了。

变体2:拥有一堆排序数组。每个元素合并到底部数组,然后级联,但合并到只有一个,或从顶部的第二个大于顶部。添加完最后一个元素后,通过合并它来折叠数组。

我使用变体2的情况是我有大量数据流进入的情况。我将前几个已排序数组的堆栈保存在内存中,然后将其存储在磁盘上。这导致了良好的参考局部性和有效使用磁盘。 (你问为什么我没有使用现成的解决方案?我进入的数据集比我必须处理它的磁盘大,那里有自定义合并逻辑,而且排序真的不是那样的很难写。)