Array Insertion at Middle Index in DSA Rust - Time & Space Complexity
We want to understand how long it takes to insert an element in the middle of an array.
How does the time needed change as the array gets bigger?
Analyze the time complexity of the following code snippet.
fn insert_middle(arr: &mut Vec<i32>, value: i32) {
let mid = arr.len() / 2;
arr.insert(mid, value);
}
This code inserts a value exactly in the middle of a dynamic array (vector).
Identify the loops, recursion, array traversals that repeat.
- Primary operation: Shifting elements to the right to make space for the new element.
- How many times: About half of the array elements are moved one step to the right.
When the array size grows, the number of elements to shift grows roughly in the same way.
| Input Size (n) | Approx. Operations (shifts) |
|---|---|
| 10 | 5 |
| 100 | 50 |
| 1000 | 500 |
Pattern observation: The number of operations grows roughly in direct proportion to the size of the array.
Time Complexity: O(n)
This means the time to insert in the middle grows linearly as the array gets bigger.
[X] Wrong: "Inserting in the middle is always fast because we just add one element."
[OK] Correct: Actually, many elements need to move to make space, so the work grows with array size.
Knowing how array insertions work helps you choose the right data structure and explain your choices clearly.
"What if we inserted at the end of the array instead? How would the time complexity change?"
Practice
Solution
Step 1: Understand middle index insertion
Inserting at the middle means placing a new element at the center position, pushing existing elements to the right.Step 2: Differentiate from other operations
Replacing or removing elements changes existing data, but insertion adds a new element without deletion.Final Answer:
Adding a new element exactly in the center, shifting others right -> Option CQuick Check:
Middle insertion means add and shift [OK]
- Thinking insertion replaces an element
- Confusing insertion with removal
- Assuming insertion always happens at end
vec?Solution
Step 1: Identify correct insertion method
Rust'sinsertmethod adds an element at a given index, shifting others right.Step 2: Calculate middle index and apply insert
Usingvec.len() / 2gives the middle index;vec.insertplaces 99 there correctly.Final Answer:
vec.insert(vec.len() / 2, 99); -> Option AQuick Check:
Use insert with middle index [OK]
- Using push adds at end, not middle
- Assigning with vec[index] replaces, not inserts
- Removing then pushing changes order
let mut vec = vec![10, 20, 30, 40];
vec.insert(vec.len() / 2, 25);
println!("{:?}", vec);Solution
Step 1: Calculate middle index
Vector length is 4, so middle index is 4 / 2 = 2.Step 2: Insert 25 at index 2
Inserting 25 at index 2 shifts elements at and after index 2 right: 30 and 40 move right.Final Answer:
[10, 20, 25, 30, 40] -> Option BQuick Check:
Insert at middle shifts elements right [OK]
- Inserting at wrong index
- Confusing insert with replace
- Miscounting vector length
vec:let mut vec = vec![1, 2, 3, 4, 5];
let mid = vec.len() / 2;
vec[mid] = 50;
println!("{:?}", vec);Solution
Step 1: Understand vec[mid] = 50;
This replaces the element at index mid instead of inserting a new one.Step 2: Correct method is insert
To insert, usevec.insert(mid, 50);which shifts elements right.Final Answer:
Using assignment replaces element instead of inserting -> Option AQuick Check:
Assignment replaces, insert adds [OK]
- Replacing element instead of inserting
- Misunderstanding vector mutability
- Incorrect println! usage
vec = vec![5, 10, 15, 20, 25, 30], write Rust code to insert 17 exactly in the middle so that the vector remains sorted. What will be the vector after insertion?Solution
Step 1: Find middle index for insertion
Vector length is 6, middle index is 6 / 2 = 3.Step 2: Insert 17 at index 3 to keep sorted order
Inserting 17 at index 3 shifts elements 20, 25, 30 right, keeping order.Final Answer:
[5, 10, 15, 17, 20, 25, 30] -> Option DQuick Check:
Insert 17 at middle index 3 to keep sorted [OK]
- Inserting at wrong index breaking order
- Appending instead of inserting
- Replacing element instead of inserting
Ready to prove it?
Pass the test and this pattern moves unknown
