Analysis of Bubble Sort and Loop Invariant
N-1 Iteration 77 12 35 42 5 1 2 3 4 5 6 101 N - 1 5 42 12 35 77 1 2 3 4 5 6 101 42 5 35 12 77 1 2 3 4 5 6 101 42 35 5 12 77 1 2 3 4 5 6 101 42 35 12 5 77 1 2 3 4 5 6 101
Outer loop Inner loop procedure Bubblesort(A isoftype in/out Arr_Type) to_do, index isoftype Num to_do <- N – 1 loop exitif(to_do = 0) index <- 1 exitif(index > to_do) if(A[index] > A[index + 1]) then Swap(A[index], A[index + 1]) endif index <- index + 1 endloop to_do <- to_do - 1 endprocedure // Bubblesort To do N-1 iterations To bubble a value Inner loop Outer loop
Bubble Sort Time Complexity Best-Case Time Complexity The scenario under which the algorithm will do the least amount of work (finish the fastest) Worst-Case Time Complexity The scenario under which the algorithm will do the largest amount of work (finish the slowest)
Bubble Sort Time Complexity Called Linear Time O(N) Order-of-N Best-Case Time Complexity Array is already sorted Need 1 iteration with (N-1) comparisons Worst-Case Time Complexity Need N-1 iterations (N-1) + (N-2) + (N-3) + …. + (1) = (N-1)* N / 2 Called Quadratic Time O(N2) Order-of-N-square
Loop Invariant It is a condition or property that is guaranteed to be correct with each iteration in the loop Usually used to prove the correctness of the algorithm
Loop Invariant for Bubble Sort By the end of iteration i the right-most i items (largest) are sorted and in place
N-1 Iterations 77 12 35 42 5 1 2 3 4 5 6 101 N - 1 1st 5 42 12 35 77 1 2 3 4 5 6 101 2nd 42 5 35 12 77 1 2 3 4 5 6 101 3rd 42 35 5 12 77 1 2 3 4 5 6 101 4th 42 35 12 5 77 1 2 3 4 5 6 101 5th
Correctness of Bubble Sort (using Loop Invariant) Bubble sort has N-1 Iterations Invariant: By the end of iteration i the right-most i items (largest) are sorted and in place Then: After the N-1 iterations The right-most N-1 items are sorted This implies that all the N items are sorted
Correctness of Bubble Sort (using Loop Invariant) What if we stop early (after iteration K) Remember the Boolean “did_swap” flag From the invariant the right-most K items are sorted A[N-(K-1)] < A[N-2] < A[N-1] < A[N] Since we stopped early, then no swaps are done, Then A[1] < A[2] < ….. < A[N-K] By merging these two, then the entire array is sorted