Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

why is the time complexity of bubble sort's best case being O(n)

I deduced the time complexity of bubble sort in its best case according to the mothod used in book ALGORITHMS 2.2. But the answer turned out to be O(n^2).

Here's my derivation, hope anyone can help me find out where is wrong:

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)];

in its best cast, the sequence is already positive before sorting. Then t8 sould be 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)]

The time complexity is O(n^2)

like image 766
Wendy.Huang Avatar asked Sep 20 '12 03:09

Wendy.Huang


People also ask

Why best case time complexity of bubble sort is O n?

Best Case. In the best-case scenario, the array is already sorted, but just in case, bubble sort performs O(n) comparisons. As a result, the time complexity of bubble sort in the best-case scenario is O(n).

Why is time complexity of bubble sort O n2?

The inner loop does O(n) work on each iteration, and the outer loop runs for O(n) iterations, so the total work is O(n2).

What is time complexity in bubble sort?

Bubble Sort is an easy-to-implement, stable sorting algorithm with a time complexity of O(n²) in the average and worst cases – and O(n) in the best case.


Video Answer


2 Answers

Your implementation

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);
        }
    }
}

lacks the control whether there was any swap in the inner loop, and the breaking out of the outer loop if there wasn't.

That control makes it possible that the best case (an already sorted array) is O(n), since then there are no swaps in the inner loop when it runs the first time.

public void bubbleSort(int arr[]) {
    boolean swapped = true;
    for(int i = 0, len = arr.length; swapped && i < len - 1; i++) {
        swapped = false;
        for(int j = 0; j < len - i - 1; j++) {
            if(arr[j + 1] < arr[j]) {
                swap(arr, j, j + 1);
                swapped = true;
            }
        }
    }
}
like image 173
Daniel Fischer Avatar answered Oct 13 '22 00:10

Daniel Fischer


The best case for bubble sort is when the elements are already sorted.

The usual implementation gives O(n^2) time complexity for best, average, worst case.

We can modify the bubble sort by checking if array is sorted or not(a swap would indicate an unsorted array) at every iteration.

As soon as the array is found to be sorted(if no swap occurs) control exits from loops or loop continues to execute till length-1.

And same is true for insertion sort as well!

like image 21
Viraj Singh Avatar answered Oct 13 '22 00:10

Viraj Singh