Bubble Sort

Bubble Sort

Visualization

Algorithm Steps

  1. Start from the first element in the array.
  2. Compare the current element with the next element.
  3. If the current element is greater than the next element, swap them.
  4. Move to the next element and repeat steps 2 and 3 for the entire array.
  5. After one complete pass, the largest element will be at the end.
  6. Repeat the process for the remaining unsorted elements (excluding the last sorted ones).
  7. Continue until the array is completely sorted.

Bubble Sort Program Code

Python
Java
JavaScript
C
C++
C#
Kotlin
Swift
Go
Php
def bubble_sort(arr):
    n = len(arr)
    # Traverse through all array elements
    for i in range(n):
        # Last i elements are already in place
        for j in range(0, n - i - 1):
            # Swap if the element found is greater than the next element
            if arr[j] > arr[j + 1]:
                arr[j], arr[j + 1] = arr[j + 1], arr[j]
if __name__ == '__main__':
    arr = [6, 3, 8, 2, 7, 4]
    bubble_sort(arr)
    print("Sorted array is:", arr)

Detailed Step by Step Example

Let us take the followign array, and apply Bubble Sort algorithm to sort the array.

{ "array": [6,3,8,2,7,4], "showIndices": false, "specialIndices": [] }

Pass 1

➜ Comparing 6 and 3

{ "array": [6,3,8,2,7,4], "showIndices": false, "highlightIndicesBorder": [0,1], "highlightIndicesGreen": [], "specialIndices": [] }

6 > 3.
Swap 6 and 3.
We need to arrange them in ascending order.

{ "array": [3,6,8,2,7,4], "showIndices": false, "highlightIndices": [0,1], "highlightIndicesGreen": [], "specialIndices": [] }

➜ Comparing 6 and 8

{ "array": [3,6,8,2,7,4], "showIndices": false, "highlightIndicesBorder": [1,2], "highlightIndicesGreen": [], "specialIndices": [] }

6 <= 8.
No swap needed.
They are already in ascending order.

➜ Comparing 8 and 2

{ "array": [3,6,8,2,7,4], "showIndices": false, "highlightIndicesBorder": [2,3], "highlightIndicesGreen": [], "specialIndices": [] }

8 > 2.
Swap 8 and 2.
We need to arrange them in ascending order.

{ "array": [3,6,2,8,7,4], "showIndices": false, "highlightIndices": [2,3], "highlightIndicesGreen": [], "specialIndices": [] }

➜ Comparing 8 and 7

{ "array": [3,6,2,8,7,4], "showIndices": false, "highlightIndicesBorder": [3,4], "highlightIndicesGreen": [], "specialIndices": [] }

8 > 7.
Swap 8 and 7.
We need to arrange them in ascending order.

{ "array": [3,6,2,7,8,4], "showIndices": false, "highlightIndices": [3,4], "highlightIndicesGreen": [], "specialIndices": [] }

➜ Comparing 8 and 4

{ "array": [3,6,2,7,8,4], "showIndices": false, "highlightIndicesBorder": [4,5], "highlightIndicesGreen": [], "specialIndices": [] }

8 > 4.
Swap 8 and 4.
We need to arrange them in ascending order.

{ "array": [3,6,2,7,4,8], "showIndices": false, "highlightIndices": [4,5], "highlightIndicesGreen": [], "specialIndices": [] }

8 is now at its correct position.

{ "array": [3,6,2,7,4,8], "showIndices": false, "highlightIndicesGreen": [5], "specialIndices": [] }

Pass 2

➜ Comparing 3 and 6

{ "array": [3,6,2,7,4,8], "showIndices": false, "highlightIndicesBorder": [0,1], "highlightIndicesGreen": [5], "specialIndices": [] }

3 <= 6.
No swap needed.
They are already in ascending order.

➜ Comparing 6 and 2

{ "array": [3,6,2,7,4,8], "showIndices": false, "highlightIndicesBorder": [1,2], "highlightIndicesGreen": [5], "specialIndices": [] }

6 > 2.
Swap 6 and 2.
We need to arrange them in ascending order.

{ "array": [3,2,6,7,4,8], "showIndices": false, "highlightIndices": [1,2], "highlightIndicesGreen": [5], "specialIndices": [] }

➜ Comparing 6 and 7

{ "array": [3,2,6,7,4,8], "showIndices": false, "highlightIndicesBorder": [2,3], "highlightIndicesGreen": [5], "specialIndices": [] }

6 <= 7.
No swap needed.
They are already in ascending order.

➜ Comparing 7 and 4

{ "array": [3,2,6,7,4,8], "showIndices": false, "highlightIndicesBorder": [3,4], "highlightIndicesGreen": [5], "specialIndices": [] }

7 > 4.
Swap 7 and 4.
We need to arrange them in ascending order.

{ "array": [3,2,6,4,7,8], "showIndices": false, "highlightIndices": [3,4], "highlightIndicesGreen": [5], "specialIndices": [] }

7 is now at its correct position.

{ "array": [3,2,6,4,7,8], "showIndices": false, "highlightIndicesGreen": [4,5], "specialIndices": [] }

Pass 3

➜ Comparing 3 and 2

{ "array": [3,2,6,4,7,8], "showIndices": false, "highlightIndicesBorder": [0,1], "highlightIndicesGreen": [4,5], "specialIndices": [] }

3 > 2.
Swap 3 and 2.
We need to arrange them in ascending order.

{ "array": [2,3,6,4,7,8], "showIndices": false, "highlightIndices": [0,1], "highlightIndicesGreen": [4,5], "specialIndices": [] }

➜ Comparing 3 and 6

{ "array": [2,3,6,4,7,8], "showIndices": false, "highlightIndicesBorder": [1,2], "highlightIndicesGreen": [4,5], "specialIndices": [] }

3 <= 6.
No swap needed.
They are already in ascending order.

➜ Comparing 6 and 4

{ "array": [2,3,6,4,7,8], "showIndices": false, "highlightIndicesBorder": [2,3], "highlightIndicesGreen": [4,5], "specialIndices": [] }

6 > 4.
Swap 6 and 4.
We need to arrange them in ascending order.

{ "array": [2,3,4,6,7,8], "showIndices": false, "highlightIndices": [2,3], "highlightIndicesGreen": [4,5], "specialIndices": [] }

6 is now at its correct position.

{ "array": [2,3,4,6,7,8], "showIndices": false, "highlightIndicesGreen": [3,4,5], "specialIndices": [] }

Pass 4

➜ Comparing 2 and 3

{ "array": [2,3,4,6,7,8], "showIndices": false, "highlightIndicesBorder": [0,1], "highlightIndicesGreen": [3,4,5], "specialIndices": [] }

2 <= 3.
No swap needed.
They are already in ascending order.

➜ Comparing 3 and 4

{ "array": [2,3,4,6,7,8], "showIndices": false, "highlightIndicesBorder": [1,2], "highlightIndicesGreen": [3,4,5], "specialIndices": [] }

3 <= 4.
No swap needed.
They are already in ascending order.

4 is now at its correct position.

{ "array": [2,3,4,6,7,8], "showIndices": false, "highlightIndicesGreen": [2,3,4,5], "specialIndices": [] }

Pass 5

➜ Comparing 2 and 3

{ "array": [2,3,4,6,7,8], "showIndices": false, "highlightIndicesBorder": [0,1], "highlightIndicesGreen": [2,3,4,5], "specialIndices": [] }

2 <= 3.
No swap needed.
They are already in ascending order.

3 is now at its correct position.

{ "array": [2,3,4,6,7,8], "showIndices": false, "highlightIndicesGreen": [1,2,3,4,5], "specialIndices": [] }

Pass 6

2 is now at its correct position.

{ "array": [2,3,4,6,7,8], "showIndices": false, "highlightIndicesGreen": [0,1,2,3,4,5], "specialIndices": [] }

Array is fully sorted.