【问题标题】:Why insertion sort is best algorithm for sorted or nearly sorted array?为什么插入排序是排序或接近排序数组的最佳算法?
【发布时间】:2016-03-09 06:09:20
【问题描述】:

所以我猜是因为它只是比较了 A[k] 和 A[k-1],并且在一次扫描中完成了实现,但它仍然不清楚。有人可以解释得更好。 谢谢

【问题讨论】:

标签: algorithm sorted


【解决方案1】:

link 显示了具有不同类型数据集的排序算法的图形表示。 可以看到,在对数据进行排序后,算法复杂度降低到 N,相当于输入的元素个数。

所提供的链接清楚地说明了它的效率如何。

【讨论】:

  • 谢谢!帮助很大
  • 不客气,你能接受答案并结束问题吗?
【解决方案2】:

您回答了您自己的问题:对于几乎排序的数组,插入排序只需要少数 O(n) 传递即可完成。将其与合并排序等分而治之的排序算法进行对比,后者采用O(n*lgn)。对于n 的任何非平凡值,分治算法将需要多次O(n) 传递,即使数组几乎完全排序,而插入排序可能只需要几次。

【讨论】:

    【解决方案3】:

    插入排序是一种比选择排序更快、改进程度更高的排序算法。在选择排序中,无论数据是否已经排序,算法都会遍历所有数据。但是,插入排序的工作方式不同,它不是在每次通过后迭代所有数据,而是算法只遍历它需要的数据,直到正在排序的段被排序。同样,插入排序需要两个循环,因此需要两个主要变量,在本例中分别命名为“i”和“j”。变量 'i' 和 'j' 在第一个循环的每次通过后都从相同的索引开始,第二个循环仅在变量 'j' 大于索引 0 并且 arr[j]

    【讨论】:

    • 这是一个不错的答案,但它完全难以辨认。使用提供的工具将您的文本分成短段落并格式化您的代码示例。然后它可能会吸引选票;至少我的。
    • 好的,但我将它与其他算法进行了比较,我也会积极接受你的建议,谢谢。
    【解决方案4】:

    排序算法的总体目标是尽量减少比较次数。排序算法在比较次数上有一个下限和一个上限(n log n 合并和堆排序的最坏情况,n log n 快速排序的平均情况)。在最一般的情况下,您会使用恰好具有最佳平均或最佳最坏情况比较次数的算法。但是,当您对数据有所了解时(例如,数组已经排序或几乎排序),您可以利用插入排序的下限远低于“n log n”排序这一事实。

    例如,如果你有一个数组 [1,2,3,4,5,6,7,9] 并且你需要在其中插入 8,你可以将它插入到最后,然后对数组进行排序使用 vanilla n log n 排序(它将进行大约 28 次比较(大致)以将数据排序为 [1,2,3,4,5,6,7,8,9])。但是,插入排序只允许您在大约 8 次比较中将 8 插入正确的位置。

    【讨论】:

      猜你喜欢
      • 2011-11-27
      • 1970-01-01
      • 1970-01-01
      • 2021-03-05
      • 1970-01-01
      • 1970-01-01
      • 2018-10-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多