Bird
Raised Fist0
DSA C++programming~5 mins

Bubble Sort Algorithm in DSA C++ - Time & Space Complexity

Choose your learning style10 modes available
Time Complexity: Bubble Sort Algorithm
O(n²)
Understanding Time Complexity

We want to understand how the time taken by Bubble Sort changes as the list size grows.

How does the number of comparisons and swaps increase when the list gets bigger?

Scenario Under Consideration

Analyze the time complexity of the following code snippet.


void bubbleSort(int arr[], int n) {
  for (int i = 0; i < n - 1; i++) {
    for (int j = 0; j < n - i - 1; j++) {
      if (arr[j] > arr[j + 1]) {
        int temp = arr[j];
        arr[j] = arr[j + 1];
        arr[j + 1] = temp;
      }
    }
  }
}
    

This code sorts an array by repeatedly swapping adjacent elements if they are in the wrong order.

Identify Repeating Operations
  • Primary operation: Comparing and possibly swapping adjacent elements inside the inner loop.
  • How many times: The inner loop runs about n times for each of the n passes of the outer loop, so roughly n x n = n² times.
How Execution Grows With Input

As the list size grows, the number of comparisons grows much faster because each element is compared with many others multiple times.

Input Size (n)Approx. Operations
10About 45 comparisons
100About 4,950 comparisons
1000About 499,500 comparisons

Pattern observation: When the input size doubles, the operations roughly quadruple, showing a square growth pattern.

Final Time Complexity

Time Complexity: O(n²)

This means the time taken grows roughly with the square of the number of elements, so sorting gets much slower as the list grows.

Common Mistake

[X] Wrong: "Bubble Sort only takes time proportional to the number of elements (O(n)) because it just compares neighbors."

[OK] Correct: Each element is compared many times in nested loops, so the total comparisons grow much faster than the list size.

Interview Connect

Understanding Bubble Sort's time complexity helps you appreciate why more efficient sorting methods are used in real projects and shows your grasp of algorithm basics.

Self-Check

"What if we add a flag to stop early if no swaps happen in a pass? How would the time complexity change in the best case?"

Practice

(1/5)
1. What is the main idea behind the Bubble Sort algorithm?
easy
A. Divide the array into halves and sort each half separately
B. Repeatedly swap adjacent elements if they are in the wrong order
C. Select the smallest element and move it to the beginning
D. Insert each element into its correct position in a sorted part

Solution

  1. Step 1: Understand Bubble Sort process

    Bubble Sort compares adjacent elements and swaps them if they are out of order.
  2. Step 2: Identify the correct description

    This swapping of neighbors repeats until the whole list is sorted.
  3. Final Answer:

    Repeatedly swap adjacent elements if they are in the wrong order -> Option B
  4. Quick Check:

    Bubble Sort = Swap neighbors repeatedly [OK]
Hint: Bubble Sort swaps neighbors repeatedly until sorted [OK]
Common Mistakes:
  • Confusing Bubble Sort with Selection Sort
  • Thinking it divides the array like Merge Sort
  • Assuming it inserts elements like Insertion Sort
2. Which of the following is the correct syntax for the inner loop of Bubble Sort in C++ to compare adjacent elements in an array arr of size n?
easy
A. for (int j = 0; j < n - i - 1; j++)
B. for (int j = 0; j < n; j++)
C. for (int j = 1; j < n - i; j++)
D. for (int j = 0; j <= n - i; j++)

Solution

  1. Step 1: Understand inner loop range

    The inner loop runs from 0 to n - i - 1 because after each pass, the last i elements are sorted.
  2. Step 2: Check each option

    for (int j = 0; j < n - i - 1; j++) correctly uses j < n - i - 1 to avoid out-of-bound and unnecessary comparisons.
  3. Final Answer:

    for (int j = 0; j < n - i - 1; j++) -> Option A
  4. Quick Check:

    Inner loop limit = n - i - 1 [OK]
Hint: Inner loop stops before sorted elements at end [OK]
Common Mistakes:
  • Using j < n instead of j < n - i - 1
  • Starting j from 1 instead of 0
  • Using <= instead of < causing out-of-bound
3. What will be the output of the following C++ code snippet?
int arr[] = {5, 3, 8, 4};
int n = 4;
for (int i = 0; i < n - 1; i++) {
  for (int j = 0; j < n - i - 1; j++) {
    if (arr[j] > arr[j + 1]) {
      int temp = arr[j];
      arr[j] = arr[j + 1];
      arr[j + 1] = temp;
    }
  }
}
for (int i = 0; i < n; i++) {
  std::cout << arr[i] << " ";
}
medium
A. 3 5 4 8
B. 5 3 4 8
C. 8 5 4 3
D. 3 4 5 8

Solution

  1. Step 1: Trace first pass of Bubble Sort

    Compare pairs: (5,3) swap -> {3,5,8,4}, (5,8) no swap, (8,4) swap -> {3,5,4,8}
  2. Step 2: Trace second pass and final array

    Next pass: (3,5) no swap, (5,4) swap -> {3,4,5,8}, last pass no swaps needed.
  3. Final Answer:

    3 4 5 8 -> Option D
  4. Quick Check:

    Sorted array = 3 4 5 8 [OK]
Hint: Bubble Sort pushes largest to end each pass [OK]
Common Mistakes:
  • Not swapping correctly on first pass
  • Confusing order of swaps
  • Printing unsorted array
4. Identify the error in the following Bubble Sort code snippet and select the correct fix:
void bubbleSort(int arr[], int n) {
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < n - i; j++) {
      if (arr[j] > arr[j + 1]) {
        int temp = arr[j];
        arr[j] = arr[j + 1];
        arr[j + 1] = temp;
      }
    }
  }
}
medium
A. Add a swap flag to optimize and stop early if sorted
B. Change outer loop to i < n - 1 to reduce unnecessary passes
C. Change inner loop to j < n - i - 1 to avoid out-of-bound access
D. No error, code is correct

Solution

  1. Step 1: Analyze inner loop condition

    Inner loop uses j < n - i, but accesses arr[j + 1], which causes out-of-bound when j = n - i - 1.
  2. Step 2: Correct inner loop limit

    Changing to j < n - i - 1 prevents accessing arr[n], fixing runtime error.
  3. Final Answer:

    Change inner loop to j < n - i - 1 to avoid out-of-bound access -> Option C
  4. Quick Check:

    Inner loop limit fixes out-of-bound [OK]
Hint: Inner loop must stop before last compared index [OK]
Common Mistakes:
  • Ignoring out-of-bound access
  • Changing outer loop only
  • Assuming code is correct without checking array access
5. Given an array arr = {7, 2, 9, 4, 3}, how many total swaps will Bubble Sort perform to sort it in ascending order?
hard
A. 6
B. 5
C. 4
D. 7

Solution

  1. Step 1: Trace swaps in each pass

    Pass 1: (7,2) swap, (7,9) no, (9,4) swap, (9,3) swap -> 3 swaps
    Array now: {2,7,4,3,9}
  2. Step 2: Continue tracing swaps

    Pass 2: (2,7) no, (7,4) swap, (7,3) swap -> 2 swaps
    Array now: {2,4,3,7,9}
    Pass 3: (2,4) no, (4,3) swap -> 1 swap
    Array now: {2,3,4,7,9}
    Pass 4: no swaps
  3. Final Answer:

    6 -> Option A
  4. Quick Check:

    Total swaps counted = 6 [OK]
Hint: Count swaps each pass until no swaps left [OK]
Common Mistakes:
  • Counting comparisons instead of swaps
  • Stopping early without counting all passes
  • Miscounting swaps in passes
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard