我很难理解为什么在 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] size = 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)
谁能解释我哪里错了?