我很难理解为什么插入排序的最佳情况是O(n)?
for (int i = 0; i < size; i++) {
for (int j = i; j > 0; j--) {
int k = j-1;
if( a[j] < a[k]){
int temp = a[j];
a[j] = a[k];
a[k] = temp;
}
}
}
让我们考虑一个初始数组 [1,2,3,4,5] 大小为 5
第一次循环将从 i = 0 到 size - 1
第二个循环将从 i 到 1,但假设内部 for 循环也从 0 到 size - 1,换句话说,内部 for 循环也会执行 (n-1) 次,类似于外部 for 循环
我同意没有交换,但会有比较,它将与未排序的数组完全相同 ?
那么 n-1(外部循环) * n - 1(内部循环) = n^2 - n + 1 = O(n^2)
有人能解释一下我哪里错了吗?
a[i+1]>=a[i]
。 - n. m.