【问题标题】:Mergesort : Revision合并排序:修订
【发布时间】:2010-04-19 13:17:17
【问题描述】:

合并排序是否起作用;

获取值列表

一分为二

取每个列表的第一个元素,最低值的元素进入一个新列表(我猜想从原始列表中删除)。比较接下来的两个数字 - 这样做直到一个列表为空,然后将另一个列表的其余部分放在 nw 列表的末尾?

另外,在链表上执行此操作会产生什么后果?

谢谢

【问题讨论】:

标签: java algorithm mergesort


【解决方案1】:

您描述的只是合并(没有排序),排序是在合并排序中递归完成的。

Also, what are the ramifications of doing this on a linked list?

拆分链表可能太昂贵了,如果您有两个排序列表,您可以轻松地将它们合并以保持顺序。

【讨论】:

    【解决方案2】:

    合并排序的工作原理是将一个数组一分为二,然后对每一半调用合并排序。当仅使用一个元素调用合并排序时,它只会返回它。合并发生在递归之后,并将数组按排序顺序重新组合在一起。

    array mergesort(array)
    {
        if(array.len == 1) return array;
    
        array temp1 = mergesort(array.firsthalf);
        array temp2 = mergesort(array.secondhalf);
    
        return merge(temp1, temp2);
    }
    

    将归并排序应用于链表的问题在于,您没有简单的方法将其一分为二。你必须迭代直到你走到一半。这会消耗额外的时间,并且会过度影响合并排序的性能。 使用数组,您可以执行简单的恒定时间整数运算将其一分为二。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-09-09
      • 2011-08-09
      • 2018-03-08
      • 1970-01-01
      • 1970-01-01
      • 2013-04-12
      • 1970-01-01
      • 2017-09-07
      相关资源
      最近更新 更多