【发布时间】:2017-09-04 00:50:27
【问题描述】:
当插入排序和冒泡排序为 O(n) 时,为什么选择排序的最佳情况时间复杂度为 O(n^2)?他们的平均时间是一样的。我不明白为什么最好的案例时间不同。不胜感激。
【问题讨论】:
标签: algorithm time-complexity selection-sort
当插入排序和冒泡排序为 O(n) 时,为什么选择排序的最佳情况时间复杂度为 O(n^2)?他们的平均时间是一样的。我不明白为什么最好的案例时间不同。不胜感激。
【问题讨论】:
标签: algorithm time-complexity selection-sort
对于选择排序,您必须搜索最小值并在第一次迭代中将其放在首位。在第二次迭代中,您必须在数组的未排序部分中搜索最小值并将其放在第二位,依此类推...
在迭代到未排序部分结束后,您只知道哪个元素是最小值。即使数组已排序(!),您也必须迭代到最后。然后你肯定知道你找到了将它放在正确位置的最小值(在已排序部分的末尾)
所以第一次迭代需要 n 步来找到最小值。 第二次迭代需要 n-1 步来找到未排序部分的最小值 ... 最后一次迭代需要 1 步才能找到未排序部分的最小值。
在这些步骤之后,您有一个排序数组(即使它之前已排序)。选择排序不检查数组是否已经按线性时间算法排序。选择排序反复搜索最小值。这就是选择排序的工作方式。
当你反复搜索最小值时,它需要 n+(n-1)+...+1 所以你得到 (n(n+1))/2 = (n²+n)/2 这是 O(n² )
【讨论】: