【问题标题】:want to implement merge sort algorithm in different way想以不同的方式实现归并排序算法
【发布时间】:2012-03-20 09:04:18
【问题描述】:

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

合并排序(A、p、r)

  1. IF p
  2. THEN q = FLOOR[(p + r)/2] // 除法步骤
  3. MERGE (A, p, q) // 征服步骤。
  4. MERGE (A, q + 1, r) // 征服步骤。
  5. MERGE (A, p, q, r) // 征服步骤。

类似 p

【问题讨论】:

  • “类似 p

标签: algorithm sorting language-agnostic mergesort


【解决方案1】:

我以前做过一些听起来像这样的事情。这里有 2 个变体。

变体 1:遍历列表,对每一对进行排序。然后浏览列表,合并每一对。然后每对4s,以此类推。合并整个列表后,就完成了。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多