【发布时间】:2019-07-28 23:14:56
【问题描述】:
给定一个冒泡排序算法
for (int i = 0; i < A.length - 1; i++)
for (int j = 0; j < A.length - i - 1; j++)
if (A[j] > A[j + 1]) {
int temp = A[j];
A[j] = A[j + 1];
A[j + 1] = temp;
}
在给定的数组已经排序的情况下,内部循环中的 if 语句将始终为 false 打破内部 for 循环并递增 j 直到达到 A.length-i-1。当达到A.length-i-1 时,i 增加。这个过程循环直到i 达到A.length-1。
我的困惑:
如果两个嵌套循环都迭代到各自的上限,尽管没有进行交换,但最佳情况下时间复杂度是否仍为 O(n^2)?谁能简单地向我解释一下为什么会是 O(n)
【问题讨论】:
-
BubbleSort 的 WP 文章的这一部分正好解决了这个问题:en.wikipedia.org/wiki/Bubble_sort#Optimizing_bubble_sort
-
@Javan 哇,最后一个我想找的地方。谢谢。
标签: java time time-complexity