我按照书算法 2.2使用的评判推断冒泡排序的时间复杂度在最好的情况下。 但得到的答复竟然是为O(n ^ 2)。
这里是我的推导,希望有人能帮助我找出错误的是:
public void bubbleSort(int arr[]) {
for(int i = 0, len = arr.length; i < len - 1; i++) {
for(int j = 0; j < len - i - 1; j++) {
if(arr[j + 1] < arr[j])
swap(arr, j, j + 1);
}
}
}
Statements cost times
i = 0,len = arr.length c1 1
i < len - 1 c2 n
i++ c3 n - 1
j = 0 c4 n - 1
j < len - i - 1 c5 t1(i=0) + t1(i=1) + ... + t1(i = n-2)
j++ c6 t2(i=0) + t2(i=1) + ... + t2(i = n-2)
arr[j + 1] < arr[j] c7 t3(i=0) + t3(i=1) + ... + t3(i = n-2)
swap(arr, j, j + 1) c8 t4(i=0) + t4(i=1) + ... + t4(i = n-2)
T(N)= C1 + C2N + C3(N - 1)+ C4(N - 1)+ c5t5 + c6t6 + c7t7 + c8t8 = C1 + C2N + C3(N - 1)+ C4(N - 1)+ C5 [T1(I = 0)+ T1(I = 1)+ ... + T1(I = N-2)] + C6 [T2(I = 0)+ T2(I = 1)+ ... + T2 (I = N-2)] + C7 [T3(I = 0)+ T3(I = 1)+ ... + T3(I = N-2)] + C8 [T4(I = 0)+ T4( I = 1)+ ... + T4(I = N-2)];
在最佳投,序列已经在排序前积极。 然后T8是前人的精力0。
T(N)= C1 + C2N + C3(N - 1)+ C4(N - 1)+ C5 [T1(I = 0)+ T1(I = 1)+ ... + T1(I = N-2 )] + C6 [T2(I = 0)+ T2(I = 1)+ ... + T2(I = N-2)] + C7 [T3(I = 0)+ T3(I = 1)+。 .. + T3(I = N-2)]
的时间复杂度是O(n ^ 2)