【问题标题】:Can any one help me out in sorting the array by inserting k new elements任何人都可以通过插入 k 个新元素来帮助我对数组进行排序吗
【发布时间】:2014-05-08 12:08:07
【问题描述】:

将K个新元素插入包含N个元素的排序数组的时间复杂度是多少(如何做)。这可以在 O(K Log K + N) 中完成

【问题讨论】:

标签: sorting data-structures


【解决方案1】:

这取决于使用的数据结构。您提到了“在数组中”,这使得它 O(k * n) O(k + n)。在其他实现中,它可以减少到 O(k log n),这是找到 k 个元素中每个元素的插入位置的(最佳?)复杂度。

但是,数组不允许插入。在位置 i 插入一个新元素需要将所有从旧 i 开始的元素向后推一个空格。如果 i 接近结尾那没关系,但在接近开头时,您最终将几乎每个元素都向后移动,因此每次插入的最坏情况是 O(n)。最重要的是,数组的空间有限。如果您的数组不适合 n+k 个元素,则必须分配新内存并从旧内存复制到新内存。

[编辑]

正如 sashoalm 所说,如果一开始就知道所有 k 个新元素,则可以先对新元素数组进行排序 (O(k log k)),然后将它们与旧数组合并 (O( n + k))。如果 k

【讨论】:

    【解决方案2】:

    我有一个新的答案,如下所示

    1. 使用 O(K * Log K) 的归并排序对 K 个新元素进行排序
    2. 现在合并两个排序的数组(使用第三个数组,在完成删除第一个和第二个数组之后)。第一个数组已经排序,其中包含 N 个元素,第二个数组包含 K 个元素,这又需要 O(N + K),这将是 O(N)。

    3. 因此,总时间复杂度将是 O(K * Log K)(第一步)+ O(N)(第二步)

    4. 总时间复杂度为 O(K * Log K + N)

    【讨论】:

    • 如果您将实际答案归功于 sashoalm,那就太好了。
    • @Gaminic 会的。他在我已经删除的废话答案中评论了解决方案
    • @schmop 请不要相信我。我认为 OP 的问题根本不应该被回答,它应该被否决并关闭。
    猜你喜欢
    • 2021-06-24
    • 2016-04-29
    • 2021-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多