【问题标题】:Which of the given sorting algorithms will be fastest when run on an array that happens to already be in order?在恰好已经有序的数组上运行时,哪个给定的排序算法最快?
【发布时间】:2017-06-10 00:01:56
【问题描述】:

问题:

在恰好已经有序的数组上运行时,哪种排序算法最快?

(A) 无法知道哪个最快。

(B) 选择排序

(C) 插入排序

(D) 二元排序

(E) 所有这些算法将以相同的速度运行。

我一直在为家庭作业做一些研究,但得到的答案相互矛盾。有的地方说是插入,有的地方说两者相等,还有的地方说不能确定。现在很困惑,希望得到一些帮助。

【问题讨论】:

  • 什么样的帮助?答案?
  • @DaveNewton :我上次查看此内容时,stackoverflow 仍然是一个问答站点。这里有数以百万计的“家庭作业解决方案”,无论它们是否被声明(或可识别)。如果我想知道这个答案,我希望(并期待!)在这里找到它。
  • 如果你只是追踪每个算法对排序数组的作用,这应该是微不足道的。

标签: java arrays algorithm sorting


【解决方案1】:

C 插入排序

当数组已经几乎或完全排序时,通常总是最快和最容易实现的。因为我们的操作较少。

选择排序仍然会进行成对比较,二进制排序也会稍微慢一些。

【讨论】:

  • 虽然没有作为选项列出,但自然自下而上的归并排序也是 O(n),通过一次即可确定只有一次排序运行且没有要合并的内容。
  • 为了让这个答案有用,它应该解释为什么插入排序会更快,为什么其他的不是。
【解决方案2】:

我会说插入排序是因为:

插入排序是一种简单的排序算法,它一次构建一个最终排序的数组。与其他排序算法相比,它在大型列表上的效率要低得多。

插入排序的优点:

1) 很简单。

2) 对于小数据集非常有效。

3) 稳定;即,它不会改变具有相同键的元素的相对顺序。 4)就地;即,只需要固定数量的 O(1) 额外内存空间。

插入排序通过在每次重复时消耗一个输入元素来迭代列表,并增加一个排序的输出列表。在重复时,插入排序从输入数据中删除一个元素,在排序列表中找到它所属的位置,并将其插入那里。它重复直到没有输入元素。

我在-http://www.java2novice.com/java-sorting-algorithms/insertion-sort/阅读了这篇文章

【讨论】:

    猜你喜欢
    • 2020-02-16
    • 1970-01-01
    • 2018-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-15
    • 2017-07-16
    相关资源
    最近更新 更多