Array Traversal Patterns in DSA C - Time & Space Complexity
When we go through an array to check or change its items, we want to know how long it takes as the array grows.
We ask: How does the work increase when the array gets bigger?
Analyze the time complexity of the following code snippet.
void printArray(int arr[], int n) {
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
printf("\n");
}
This code goes through each item in the array once and prints it.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: The for-loop that visits each array element once.
- How many times: Exactly n times, where n is the array size.
As the array size grows, the number of steps grows the same way.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | 10 steps |
| 100 | 100 steps |
| 1000 | 1000 steps |
Pattern observation: Doubling the array size doubles the work.
Time Complexity: O(n)
This means the time to finish grows directly with the number of items in the array.
[X] Wrong: "Since the loop is simple, it must be constant time O(1)."
[OK] Correct: The loop runs once for each item, so time grows with array size, not fixed.
Understanding how simple loops scale helps you explain your code clearly and shows you know how programs behave with bigger data.
"What if we nested another loop inside to compare each element with every other? How would the time complexity change?"
Practice
for (int i = 0; i < n; i++) { printf("%d ", arr[i]); }Solution
Step 1: Understand the loop range
The loop starts at 0 and runs while i is less than n, incrementing i by 1 each time.Step 2: Analyze the print statement inside the loop
Each iteration prints the element at index i, so it prints elements from arr[0] to arr[n-1].Final Answer:
Prints all elements of the array from start to end -> Option DQuick Check:
Loop from 0 to n-1 prints all elements [OK]
- Confusing loop direction and thinking it prints backward
- Assuming it prints only one element
- Misreading the loop condition
arr of size n backwards in C?Solution
Step 1: Identify correct loop start and end for backward traversal
Backward traversal starts from index n-1 down to 0.Step 2: Check loop syntax correctness
for (int i = n-1; i >= 0; i--) { printf("%d", arr[i]); } uses i = n-1; i >= 0; i-- which correctly traverses backward.Final Answer:
for (int i = n-1; i >= 0; i--) { printf("%d", arr[i]); } -> Option CQuick Check:
Backward loop uses i = n-1 to 0 with decrement [OK]
- Starting loop at n instead of n-1
- Using i++ instead of i-- for backward traversal
- Accessing arr[i] with out-of-range indices
int arr[] = {5, 10, 15, 20};
int sum = 0;
for (int i = 1; i < 4; i++) {
sum += arr[i];
}
printf("%d", sum);Solution
Step 1: Identify loop indices and elements summed
The loop runs i from 1 to 3, summing arr[1], arr[2], arr[3] which are 10, 15, and 20.Step 2: Calculate sum of selected elements
sum = 10 + 15 + 20 = 45Final Answer:
45 -> Option BQuick Check:
Sum of arr[1..3] = 45 [OK]
- Starting sum from arr[0] mistakenly
- Adding wrong indices or missing last element
- Confusing loop range boundaries
arr of size n:for (int i = 0; i <= n; i++) {
printf("%d ", arr[i]);
}Solution
Step 1: Analyze loop condition and array indexing
Loop runs from i = 0 to i = n inclusive, accessing arr[n] which is out of bounds.Step 2: Correct loop condition to avoid out-of-bounds access
Change condition to i < n so indices go from 0 to n-1, valid for array of size n.Final Answer:
Loop condition should be i < n, not i <= n -> Option AQuick Check:
Array indices valid from 0 to n-1 [OK]
- Using <= instead of < in loop condition
- Starting index at 1 instead of 0
- Ignoring array size limits
arr of size n, which code snippet correctly prints every second element starting from the first element?Solution
Step 1: Understand requirement to print every second element starting at first
Start at index 0 and increment index by 2 each time to skip every other element.Step 2: Check loop correctness and bounds
for (int i = 0; i < n; i += 2) { printf("%d ", arr[i]); } uses i = 0; i < n; i += 2 which correctly prints arr[0], arr[2], arr[4], etc.Final Answer:
for (int i = 0; i < n; i += 2) { printf("%d ", arr[i]); } -> Option AQuick Check:
Increment by 2 starting at 0 prints every second element [OK]
- Starting at index 1 instead of 0
- Using <= n causing out-of-bounds
- Looping backward when forward is needed
Ready to prove it?
Pass the test and this pattern moves unknown
