Heap Insert Operation Bubble Up in DSA Rust - Time & Space 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?
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 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.
Each time we add a new item, it might move up several levels in the heap.
| Input Size (n) | Approx. Operations (swaps) |
|---|---|
| 10 | About 3 or 4 swaps |
| 100 | About 6 or 7 swaps |
| 1000 | About 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.
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.
[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.
Knowing how heap insert works and its time cost helps you explain priority queue operations clearly and confidently in interviews.
"What if we changed the heap to a min-heap? How would the bubble up operation's time complexity change?"
Practice
Solution
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.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.Final Answer:
To restore the heap property by moving the inserted element up -> Option BQuick Check:
Bubble up fixes heap order after insert [OK]
- Confusing bubble up with removing elements
- Thinking bubble up sorts the entire heap
- Believing bubble up swaps root with last element
Solution
Step 1: Identify swap method usage
To exchange two elements in a vector, Rust's Vec has a swap method taking two indices.Step 2: Confirm correct parameters
Swapping child and parent indices restores heap order during bubble up.Final Answer:
heap.swap(child_index, parent_index); -> Option AQuick Check:
swap() exchanges elements by index [OK]
- Using insert instead of swap
- Calling remove which deletes elements
- Using push which adds elements
[50, 30, 40, 10, 20], what will be the heap array after inserting 45 and performing bubble up?Solution
Step 1: Insert 45 at the end
Array becomes [50, 30, 40, 10, 20, 45].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].Step 3: Check next parent
Parent of index 2 is index 0 (value 50). 45 < 50, stop bubbling up.Final Answer:
[50, 30, 45, 10, 20, 40] -> Option CQuick Check:
Insert then bubble up swaps with parent if bigger [OK]
- Not swapping 45 with 40
- Swapping 45 with 30 incorrectly
- Stopping bubble up too early
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;
}
}
}Solution
Step 1: Analyze loop behavior
Loop runs while index > 0. Inside, swap and update index if heap[index] > heap[parent].Step 2: Identify missing else case
If heap[index] <= heap[parent], index is not updated, so loop never ends causing infinite loop.Final Answer:
Missing update of index when no swap occurs, causing infinite loop -> Option DQuick Check:
Loop must update index or break to avoid infinite loop [OK]
- Ignoring infinite loop possibility
- Wrong parent index formula
- Confusing swap with insert
- Using invalid loop condition
[5, 10, 15, 20, 25]. You insert 12. After bubble up, what is the correct heap array?Solution
Step 1: Insert 12 at the end
Array becomes [5, 10, 15, 20, 25, 12].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].Step 3: Check next parent
Parent of index 2 is index 0 (value 5). 12 > 5, stop bubbling up.Final Answer:
[5, 10, 12, 20, 25, 15] -> Option AQuick Check:
Min-heap bubble up swaps if child smaller than parent [OK]
- Not swapping 12 with 15
- Stopping bubble up too early
- Confusing min-heap with max-heap rules
Ready to prove it?
Pass the test and this pattern moves unknown
