Bubble Sort

It is the simplest sorting algorithm that repeatedly steps through the list, compares adjacent elements and swap them if they are in wrong order.

The pass through the list is repeated until the list is sorted.

Example:

First pass:

(8 3 5 4 9) => (3 8 5 4 9), Here it compares the first two elements and swaps since 8>3.

(3 8 5 4 9) => (3 5 8 4 9), Swap since 8>5.

(3 5 8 4 9) => (3 5 4 8 9), Swap since 8>4.

(3 5 4 8 9) => (3 5 4 8 9), Now since these elements are already in order(8>5), algorithm does not swap them.


Second Pass:

(3 5 4 8 9) => (3 5 4 8 9)

(3 5 4 8 9) => (3 4 5 8 9), Swap since 5>4

(3 4 5 8 9) => (3 4 5 8 9)

(3 4 5 8 9) => (3 4 5 8 9)

Now, the array is already sorted, but our algorithm does not know if it is sorted or not. The algorithm needs one whole pass without any swap to know it is sorted.


Third Pass:

(3 4 5 8 9) => (3 4 5 8 9)

(3 4 5 8 9) => (3 4 5 8 9)

(3 4 5 8 9) => (3 4 5 8 9)

(3 4 5 8 9) => (3 4 5 8 9)

Another visual example:


Pseudo code:


procedure bubble_Sort( list : array of items )

   loop = list.count;
   
   for i = 0 to loop-1 do:
      swapped = false
		
      for j = 0 to loop-1 do:
      
         // compare the adjacent elements   
         if list[j] > list[j+1] then
            // swap them 
            swap( list[j], list[j+1] )		 
            swapped = true
         end if
         
      end for
      
      /*if no number was swapped that means 
      array is sorted now, break the loop.*/
      
      if(not swapped) then
         break
      end if
      
   end for
   
end procedure return list

Implementation using C:

#include <stdio.h>

void swap(int *a, int *b)
{
    int temp = *a;
    *a = *b;
    *b = temp;
}

// An optimized version of Bubble Sort
void bubbleSort(int arr[], int n)
{
   int i, j;
   int swapped=1;
   for (i = 0; i < n-1; i++)
   {
     swapped = 0;
     for (j = 0; j < n-i-1; j++)
     {
        if (arr[j] > arr[j+1])
        {
           swap(&arr[j], &arr[j+1]);
           swapped = 1;
        }
     }

     // IF no two elements were swapped by inner loop, then break
     if (swapped == 0)
        break;
   }
}

/* Function to print an array */
void printArray(int arr[], int size)
{
    int i;
    for (i=0; i < size; i++)
        printf("%d ", arr[i]);
    printf("\n");
}

// Driver program to test above functions
int main()
{
    int arr[] = {64, 34, 25, 12, 22, 11, 90};
    int n = sizeof(arr)/sizeof(arr[0]);
    bubbleSort(arr, n);
    printf("Sorted array: \n");
    printArray(arr, n);
    return 0;
}
Output:
Sorted array:
11 12 22 25 34 64 90

Miscellaneous:

In-place: Yes

Stable: Yes

Worst case & Average case: O(n*n), occurs when array is reverse sorted.

Best case: O(n), occurs when array is already sorted.


        Contact Us

programmersdoor@gmail.com

  • LinkedIn
  • Facebook
  • Instagram

©2023 by Programmers Door