本ALGORITHMS2.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)です