【问题标题】:Best case time complexity for selection sort选择排序的最佳情况时间复杂度
【发布时间】:2017-09-04 00:50:27
【问题描述】:

当插入排序和冒泡排序为 O(n) 时,为什么选择排序的最佳情况时间复杂度为 O(n^2)?他们的平均时间是一样的。我不明白为什么最好的案例时间不同。不胜感激。

【问题讨论】:

标签: algorithm time-complexity selection-sort


【解决方案1】:

对于选择排序,您必须搜索最小值并在第一次迭代中将其放在首位。在第二次迭代中,您必须在数组的未排序部分中搜索最小值并将其放在第二位,依此类推...

在迭代到未排序部分结束后,您只知道哪个元素是最小值。即使数组已排序(!),您也必须迭代到最后。然后你肯定知道你找到了将它放在正确位置的最小值(在已排序部分的末尾)

所以第一次迭代需要 n 步来找到最小值。 第二次迭代需要 n-1 步来找到未排序部分的最小值 ... 最后一次迭代需要 1 步才能找到未排序部分的最小值。

在这些步骤之后,您有一个排序数组(即使它之前已排序)。选择排序不检查数组是否已经按线性时间算法排序。选择排序反复搜索最小值。这就是选择排序的工作方式。

当你反复搜索最小值时,它需要 n+(n-1)+...+1 所以你得到 (n(n+1))/2 = (n²+n)/2 这是 O(n² )

【讨论】:

  • 但是冒泡排序和插入排序的情况不一样。即使数组排序正确,我们也会进行 n 次迭代?为什么他们的最佳案例时间是 O(n)?
  • 正如您提到的,冒泡排序和插入排序将在数组排序后进行 n 次迭代。这对于选择排序来说少于 n^2 步,因为我们需要对每个元素进行 n 次迭代。
  • 好的,知道了。在插入排序中,在每次迭代中,如果我们发现我们要比较的第一个元素小于键,我们就不再进行比较。所以对于一个排序数组,时间是O(n)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-12
  • 2013-02-21
  • 2019-10-19
  • 2012-09-12
  • 2018-01-28
  • 2015-06-16
相关资源
最近更新 更多