Bird
Raised Fist0
DSA Rustprogramming~5 mins

Heap Insert Operation Bubble Up in DSA Rust - Time & Space Complexity

Choose your learning style10 modes available
Time Complexity: Heap Insert Operation Bubble Up
O(log n)
Understanding Time Complexity

We want to understand how long it takes to add a new item to a heap and fix its position.

How does the time grow as the heap gets bigger?

Scenario Under Consideration

Analyze the time complexity of the following code snippet.

fn bubble_up(heap: &mut Vec<i32>, mut index: usize) {
    while index > 0 {
        let parent = (index - 1) / 2;
        if heap[index] < heap[parent] {
            break;
        }
        heap.swap(index, parent);
        index = parent;
    }
}

This code moves the newly added element up the heap until the heap property is restored.

Identify Repeating Operations

Identify the loops, recursion, array traversals that repeat.

  • Primary operation: The while loop that swaps the new element with its parent.
  • How many times: At most, it runs once per level of the heap, moving up from the inserted node to the root.
How Execution Grows With Input

Each time we add a new item, it might move up several levels in the heap.

Input Size (n)Approx. Operations (swaps)
10About 3 or 4 swaps
100About 6 or 7 swaps
1000About 9 or 10 swaps

Pattern observation: The number of swaps grows slowly, roughly with the height of the heap, which increases as the logarithm of the number of items.

Final Time Complexity

Time Complexity: O(log n)

This means adding an item and fixing the heap takes time that grows slowly as the heap gets bigger, about proportional to the height of the heap.

Common Mistake

[X] Wrong: "The insert operation always takes constant time because it just adds at the end."

[OK] Correct: Adding at the end is quick, but fixing the heap by moving the item up can take multiple steps, especially in a large heap.

Interview Connect

Knowing how heap insert works and its time cost helps you explain priority queue operations clearly and confidently in interviews.

Self-Check

"What if we changed the heap to a min-heap? How would the bubble up operation's time complexity change?"

Practice

(1/5)
1. What is the main purpose of the bubble up operation during a heap insert?
easy
A. To swap the root with the last element
B. To restore the heap property by moving the inserted element up
C. To sort all elements in ascending order
D. To remove the smallest element from the heap

Solution

  1. Step 1: Understand heap property

    A heap must maintain a specific order, usually parent nodes are greater (max-heap) or smaller (min-heap) than their children.
  2. Step 2: Role of bubble up

    When a new element is inserted at the end, bubble up moves it up to restore the heap property if violated.
  3. Final Answer:

    To restore the heap property by moving the inserted element up -> Option B
  4. Quick Check:

    Bubble up fixes heap order after insert [OK]
Hint: Bubble up fixes heap order by moving new element up [OK]
Common Mistakes:
  • Confusing bubble up with removing elements
  • Thinking bubble up sorts the entire heap
  • Believing bubble up swaps root with last element
2. Which Rust code snippet correctly swaps a child and its parent during bubble up in a max-heap?
easy
A. heap.swap(child_index, parent_index);
B. heap.insert(child_index, parent_index);
C. heap.remove(child_index);
D. heap.push(parent_index);

Solution

  1. Step 1: Identify swap method usage

    To exchange two elements in a vector, Rust's Vec has a swap method taking two indices.
  2. Step 2: Confirm correct parameters

    Swapping child and parent indices restores heap order during bubble up.
  3. Final Answer:

    heap.swap(child_index, parent_index); -> Option A
  4. Quick Check:

    swap() exchanges elements by index [OK]
Hint: Use Vec.swap(child, parent) to exchange elements [OK]
Common Mistakes:
  • Using insert instead of swap
  • Calling remove which deletes elements
  • Using push which adds elements
3. Given the max-heap represented by the array [50, 30, 40, 10, 20], what will be the heap array after inserting 45 and performing bubble up?
medium
A. [50, 45, 40, 10, 20, 30]
B. [50, 30, 40, 10, 20, 45]
C. [50, 30, 45, 10, 20, 40]
D. [45, 30, 50, 10, 20, 40]

Solution

  1. Step 1: Insert 45 at the end

    Array becomes [50, 30, 40, 10, 20, 45].
  2. Step 2: Bubble up 45

    Parent of index 5 is index 2 (value 40). Since 45 > 40, swap them. New array: [50, 30, 45, 10, 20, 40].
  3. Step 3: Check next parent

    Parent of index 2 is index 0 (value 50). 45 < 50, stop bubbling up.
  4. Final Answer:

    [50, 30, 45, 10, 20, 40] -> Option C
  5. Quick Check:

    Insert then bubble up swaps with parent if bigger [OK]
Hint: Insert at end, swap up while bigger than parent [OK]
Common Mistakes:
  • Not swapping 45 with 40
  • Swapping 45 with 30 incorrectly
  • Stopping bubble up too early
4. In the following Rust code for bubble up, what is the bug?
fn bubble_up(heap: &mut Vec<i32>, mut index: usize) {
    while index > 0 {
        let parent = (index - 1) / 2;
        if heap[index] > heap[parent] {
            heap.swap(index, parent);
            index = parent;
        }
    }
}
medium
A. Loop condition should be index >= 0
B. Incorrect parent calculation formula
C. Using swap instead of insert
D. Missing update of index when no swap occurs, causing infinite loop

Solution

  1. Step 1: Analyze loop behavior

    Loop runs while index > 0. Inside, swap and update index if heap[index] > heap[parent].
  2. Step 2: Identify missing else case

    If heap[index] <= heap[parent], index is not updated, so loop never ends causing infinite loop.
  3. Final Answer:

    Missing update of index when no swap occurs, causing infinite loop -> Option D
  4. Quick Check:

    Loop must update index or break to avoid infinite loop [OK]
Hint: Always update index or break in bubble up loop [OK]
Common Mistakes:
  • Ignoring infinite loop possibility
  • Wrong parent index formula
  • Confusing swap with insert
  • Using invalid loop condition
5. You have a min-heap represented by [5, 10, 15, 20, 25]. You insert 12. After bubble up, what is the correct heap array?
hard
A. [5, 10, 12, 20, 25, 15]
B. [5, 10, 15, 20, 25, 12]
C. [5, 12, 10, 20, 25, 15]
D. [5, 10, 15, 12, 25, 20]

Solution

  1. Step 1: Insert 12 at the end

    Array becomes [5, 10, 15, 20, 25, 12].
  2. Step 2: Bubble up 12 in min-heap

    Parent of index 5 is index 2 (value 15). Since 12 < 15, swap them. New array: [5, 10, 12, 20, 25, 15].
  3. Step 3: Check next parent

    Parent of index 2 is index 0 (value 5). 12 > 5, stop bubbling up.
  4. Final Answer:

    [5, 10, 12, 20, 25, 15] -> Option A
  5. Quick Check:

    Min-heap bubble up swaps if child smaller than parent [OK]
Hint: In min-heap, bubble up swaps smaller child with parent [OK]
Common Mistakes:
  • Not swapping 12 with 15
  • Stopping bubble up too early
  • Confusing min-heap with max-heap rules
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