GoAlgo

GoAlgo

Bubble Sort

Sorting Algorithm

Bubble Sort

Bubble Sort is a simple sorting algorithm that repeatedly steps through the list, compares adjacent elements and swaps them if they are in the wrong order.

No data to display.
Playback
Speed
Input
Comparisons:0
Swaps:0
Deep Dive

Understanding Bubble Sort in Detail

Bubble Sort is often the first algorithm students encounter in Computer Science because its logic is simple and intuitive. It is a comparison-based sorting algorithm that works by repeatedly stepping through the list, comparing adjacent elements, and swapping them if they are in the wrong order.

Imagine a gym teacher trying to arrange a line of students by height. The teacher looks at the first two students. If the student on the left is taller than the student on the right, they swap places. The teacher then moves one step to the right and compares the next pair. By the time the teacher reaches the end of the line, the tallest student has "bubbled up" to the correct position at the very end. This process repeats until the entire line is sorted.

The Logic Behind the Swap

The core mechanism of Bubble Sort is the pairwise comparison.

  • Compare: The algorithm looks atarr[j]arr[j+1].
  • Decision: Ifarr[j] is greater than arr[j+1], it means the larger number is on the left, which is incorrect for ascending order.
  • Action: Swap them!temp = arr[j]arr[j] = arr[j+1]arr[j+1] = tempNow the larger number is on the right.
  • Repeat: This continues until the end of the array. After the first full pass, the largest element is guaranteed to be in the last index.

Step-by-Step Algorithm Trace

Let's trace the algorithm with a real example to see how the data moves.

Input Array: [5, 1, 4, 2, 8]

Pass 1:

  • Compare (5, 1): 5 > 1, so swap. Array: [1, 5, 4, 2, 8]
  • Compare (5, 4): 5 > 4, so swap. Array: [1, 4, 5, 2, 8]
  • Compare (5, 2): 5 > 2, so swap. Array: [1, 4, 2, 5, 8]
  • Compare (5, 8): 5 < 8, no swap. Array: [1, 4, 2, 5, 8]

The largest element (8) is now fixed at the end.

Pass 2:

  • Compare (1, 4): 1 < 4, no swap.
  • Compare (4, 2): 4 > 2, so swap. Array: [1, 2, 4, 5, 8]
  • Compare (4, 5): 4 < 5, no swap.

The second largest element (5) is fixed.

Pass 3:

  • Compare (1, 2): No swap.
  • Compare (2, 4): No swap.

The array is now sorted: [1, 2, 4, 5, 8]

Code Implementation

Below is the optimized implementation of Bubble Sort in multiple programming languages. The optimization includes a swapped flag that allows the algorithm to terminate early if no swaps occur during a pass, achieving O(n) time complexity for already-sorted arrays.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <stdio.h>
void bubbleSort(int arr[], int n) {
for (int i = 0; i < n - 1; i++) {
int swapped = 0;
for (int j = 0; j < n - 1 - i; j++) {
if (arr[j] > arr[j + 1]) {
// Swap elements
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
swapped = 1;
}
}
// If no swapping occurred, array is sorted
if (!swapped) break;
}
}
int main() {
int arr[] = {64, 34, 25, 12, 22, 11, 90};
int n = sizeof(arr) / sizeof(arr[0]);
bubbleSort(arr, n);
printf("Sorted array: ");
for (int i = 0; i < n; i++)
printf("%d ", arr[i]);
return 0;
}
C30 lines.c

Time & Space Complexity Analysis

Understanding the efficiency of Bubble Sort is crucial for coding interviews and exams.

Time Complexity

O(n²)Worst Case

This happens when the array is reverse sorted (e.g., [5, 4, 3, 2, 1]). The algorithm must perform the maximum number of comparisons and swaps. Mathematically, it runs two nested loops, leading to roughly n × n operations.

O(n²)Average Case

Even on a random set of data, the algorithm usually performs in quadratic time.

O(n)Best Case

This occurs when the array is already sorted. Thanks to the swapped flag optimization (shown in the code above), the algorithm will make one pass through the list, see that no swaps are needed, and terminate immediately.

Space Complexity

O(1)Constant Space

Bubble Sort is an "in-place" sorting algorithm. It does not require any extra data structures or memory proportional to the input size; it simply rearranges the elements within the existing array.

Interactive

Challenge Mode: Bubble Rush

You've learned the theory. Now, can you beat the O(n²) algorithm? Test your reflexes and sorting logic in our speed-coding game!

When to Use Bubble Sort?

In professional software development, Bubble Sort is rarely used because algorithms like Merge Sort, Quick Sort, or TimSort (used by Java and Python internally) are significantly faster for large datasets.

However, Bubble Sort remains relevant for specific scenarios:

Computer Graphics

It is useful for detecting very small errors in almost-sorted arrays.

Simplicity

It requires very little code to implement, making it useful for quick scripts where performance is not a concern.

Education

It is the perfect tool for teaching the fundamental concepts of algorithm design, loop invariants, and complexity analysis.