选择排序的最佳情况时间复杂度
Best case time complexity for selection sort
为什么选择排序的最佳时间复杂度是O(n^2),而插入排序和冒泡排序的最佳时间复杂度是O(n)?他们的平均时间是一样的。我不明白为什么最好的情况时间不同。非常感谢您的帮助。
对于选择排序,您必须搜索最小值并将其放在第一次迭代的第一位。在第二次迭代中,您必须在数组的未排序部分中搜索最小值并将其放在第二位,依此类推...
迭代到未排序部分结束后,你只知道哪个元素是最小的。即使数组已排序(!),您也必须迭代到最后。然后你肯定知道你找到了将它放在正确位置的最小值(在已经排序的部分的末尾)
因此第一次迭代需要 n 步才能找到最小值。
第二次迭代采取n-1步在未排序的部分中找到最小值
...
最后一次迭代需要 1 步来找到未排序部分中的最小值。
完成这些步骤后,您将得到一个排序的数组(即使之前已排序)。选择排序不检查数组是否已按线性时间算法排序。选择排序反复搜索最小值。这就是选择排序的工作方式。
当你重复搜索最小值时,它需要 n+(n-1)+...+1 所以你得到 (n(n+1))/2 = (n²+n)/2 这是在 O (n²)
为什么选择排序的最佳时间复杂度是O(n^2),而插入排序和冒泡排序的最佳时间复杂度是O(n)?他们的平均时间是一样的。我不明白为什么最好的情况时间不同。非常感谢您的帮助。
对于选择排序,您必须搜索最小值并将其放在第一次迭代的第一位。在第二次迭代中,您必须在数组的未排序部分中搜索最小值并将其放在第二位,依此类推...
迭代到未排序部分结束后,你只知道哪个元素是最小的。即使数组已排序(!),您也必须迭代到最后。然后你肯定知道你找到了将它放在正确位置的最小值(在已经排序的部分的末尾)
因此第一次迭代需要 n 步才能找到最小值。 第二次迭代采取n-1步在未排序的部分中找到最小值 ... 最后一次迭代需要 1 步来找到未排序部分中的最小值。
完成这些步骤后,您将得到一个排序的数组(即使之前已排序)。选择排序不检查数组是否已按线性时间算法排序。选择排序反复搜索最小值。这就是选择排序的工作方式。
当你重复搜索最小值时,它需要 n+(n-1)+...+1 所以你得到 (n(n+1))/2 = (n²+n)/2 这是在 O (n²)