Bird
Raised Fist0
DSA Pythonprogramming~10 mins

Merge Two Sorted Arrays Without Extra Space in DSA Python - Execution Trace

Choose your learning style10 modes available
Concept Flow - Merge Two Sorted Arrays Without Extra Space
Start with two sorted arrays A and B
↓
Compare last element of A with first element of B
↓
If A's last > B's first?
Yes→Swap elements
↓
Sort array B
↓
Sort array A
↓
Repeat until no swaps
↓
Merged arrays
We repeatedly compare and swap elements between the two arrays to ensure all smaller elements are in the first array and larger in the second, sorting each after swaps until fully merged without extra space.
Execution Sample
DSA Python
A = [1, 5, 9, 10, 15, 20]
B = [2, 3, 8, 13]
i = len(A) - 1
j = 0
while i >= 0 and j < len(B):
    if A[i] > B[j]:
        A[i], B[j] = B[j], A[i]
    i -= 1
    j += 1
A.sort()
B.sort()
This code merges two sorted arrays A and B without extra space by swapping and sorting.
Execution Table
StepOperationijA ArrayB ArraySwap HappenedNotes
1Compare A[5]=20 and B[0]=250[1, 5, 9, 10, 15, 20][2, 3, 8, 13]Yes20 > 2, swap A[5] and B[0]
2After swap50[1, 5, 9, 10, 15, 2][20, 3, 8, 13]N/AArrays updated
3Decrement i, increment j41[1, 5, 9, 10, 15, 2][20, 3, 8, 13]N/APrepare next comparison
4Compare A[4]=15 and B[1]=341[1, 5, 9, 10, 15, 2][20, 3, 8, 13]Yes15 > 3, swap A[4] and B[1]
5After swap41[1, 5, 9, 10, 3, 2][20, 15, 8, 13]N/AArrays updated
6Decrement i, increment j32[1, 5, 9, 10, 3, 2][20, 15, 8, 13]N/APrepare next comparison
7Compare A[3]=10 and B[2]=832[1, 5, 9, 10, 3, 2][20, 15, 8, 13]Yes10 > 8, swap A[3] and B[2]
8After swap32[1, 5, 9, 8, 3, 2][20, 15, 10, 13]N/AArrays updated
9Decrement i, increment j23[1, 5, 9, 8, 3, 2][20, 15, 10, 13]N/APrepare next comparison
10Compare A[2]=9 and B[3]=1323[1, 5, 9, 8, 3, 2][20, 15, 10, 13]No9 <= 13, no swap
11Decrement i, increment j14[1, 5, 9, 8, 3, 2][20, 15, 10, 13]N/Aj out of range, stop loop
12Sort A--[1, 2, 3, 5, 8, 9][20, 15, 10, 13]N/ASort first array
13Sort B--[1, 2, 3, 5, 8, 9][10, 13, 15, 20]N/ASort second array
14Final merged arrays--[1, 2, 3, 5, 8, 9][10, 13, 15, 20]N/AArrays merged without extra space
💡 Loop ends when j reaches length of B (4), no more elements to compare.
Variable Tracker
VariableStartAfter Step 1After Step 4After Step 7After Step 10Final
i554321
j001234
A[1,5,9,10,15,20][1,5,9,10,15,2][1,5,9,10,3,2][1,5,9,8,3,2][1,5,9,8,3,2][1,2,3,5,8,9]
B[2,3,8,13][20,3,8,13][20,15,8,13][20,15,10,13][20,15,10,13][10,13,15,20]
Key Moments - 3 Insights
Why do we compare A's last element with B's first element?
Because A and B are sorted, the largest element in A is at the end and the smallest in B is at the start. Swapping these ensures smaller elements move to A and larger to B, as shown in steps 1 and 4.
Why do we sort arrays after swapping instead of during?
Sorting after all swaps is efficient because swapping only moves some elements out of order. Sorting at the end (steps 12 and 13) restores order without extra space.
What stops the swapping loop?
The loop stops when j reaches the length of B (step 11), meaning all elements in B have been compared and swapped if needed.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution table at step 4, what are the contents of arrays A and B?
AA = [1, 5, 9, 10, 3, 2], B = [20, 15, 8, 13]
BA = [1, 5, 9, 10, 15, 2], B = [20, 3, 8, 13]
CA = [1, 5, 9, 10, 15, 20], B = [2, 3, 8, 13]
DA = [1, 5, 9, 8, 3, 2], B = [20, 15, 10, 13]
💡 Hint
Check the 'After swap' row after step 1 in the execution_table.
At which step does the loop stop because j reaches the length of B?
AStep 10
BStep 12
CStep 11
DStep 13
💡 Hint
Look at the 'Notes' column in the execution_table for the step where j goes out of range.
If we did not sort arrays after swapping, what would be the state of array A at the end of swaps?
A[1, 5, 9, 8, 3, 2]
B[20, 15, 10, 13]
C[1, 2, 3, 5, 8, 9]
D[1, 5, 9, 10, 15, 20]
💡 Hint
Check the array A state at step 10 before sorting in the execution_table.
Concept Snapshot
Merge Two Sorted Arrays Without Extra Space:
- Compare last of A with first of B
- Swap if A's element is bigger
- Move pointers i (end of A) and j (start of B)
- Repeat until no swaps possible
- Sort both arrays at the end
- Result: merged arrays without extra space
Full Transcript
This concept shows how to merge two sorted arrays without using extra space. We start by comparing the last element of the first array with the first element of the second array. If the element in the first array is bigger, we swap them. We then move the pointers inward and repeat this process. After all swaps, we sort both arrays to restore order. This way, all smaller elements end up in the first array and larger ones in the second, achieving a merged result without extra memory. The execution table traces each step, showing swaps and array states. Key moments clarify why we compare these elements and why sorting is done after swapping. The visual quiz tests understanding of array states and loop termination.

Practice

(1/5)
1. What is the main goal when merging two sorted arrays without extra space?
easy
A. Combine both arrays into one sorted array without using extra memory
B. Sort each array separately using extra space
C. Copy elements from one array to another without sorting
D. Create a new array to hold merged elements

Solution

  1. Step 1: Understand the problem requirement

    The problem asks to merge two sorted arrays into a single sorted sequence without using extra space, meaning no new arrays can be created.
  2. Step 2: Identify the correct approach

    We must rearrange elements within the given arrays to maintain sorted order without additional memory.
  3. Final Answer:

    Combine both arrays into one sorted array without using extra memory -> Option A
  4. Quick Check:

    Merge without extra space = Combine in-place [OK]
Hint: Merge by swapping elements in place without extra arrays [OK]
Common Mistakes:
  • Trying to create a new array for merged result
  • Sorting arrays separately without merging
  • Ignoring the no extra space constraint
2. Which of the following Python code snippets correctly swaps elements between two arrays arr1 and arr2 without extra space?
easy
A. arr1[i] = arr1[i] + arr2[j]; arr1[i] = arr1[i] - arr2[j]; arr2[j] = arr1[i]
B. arr1[i] = arr2[j]; arr2[j] = arr1[i]
C. temp = arr1[i]; arr1[i] = arr2[j]; arr2[j] = temp
D. arr1[i], arr2[j] = arr2[j], arr1[i]

Solution

  1. Step 1: Check swapping syntax in Python

    Python allows swapping two variables in one line using tuple unpacking: a, b = b, a.
  2. Step 2: Identify correct swap without extra variable

    arr1[i], arr2[j] = arr2[j], arr1[i] uses this syntax correctly to swap arr1[i] and arr2[j] without extra space.
  3. Final Answer:

    arr1[i], arr2[j] = arr2[j], arr1[i] -> Option D
  4. Quick Check:

    Python swap syntax = arr1[i], arr2[j] = arr2[j], arr1[i] [OK]
Hint: Use Python tuple unpacking for swap: a, b = b, a [OK]
Common Mistakes:
  • Assigning arr1[i] before arr2[j] loses original value
  • Using temp variable unnecessarily
  • Using arithmetic swap which can cause errors
3. What will be the content of arr1 and arr2 after running the following code?
arr1 = [1, 5, 9, 10, 15, 20]
arr2 = [2, 3, 8, 13]
i = 5
j = 0
while i >= 0 and j < len(arr2):
    if arr1[i] > arr2[j]:
        arr1[i], arr2[j] = arr2[j], arr1[i]
        i -= 1
        j += 1
    else:
        i -= 1
arr1.sort()
arr2.sort()
print(arr1)
print(arr2)
medium
A. [1, 5, 8, 10, 13, 15] and [2, 3, 9, 20]
B. [1, 2, 3, 5, 8, 9] and [10, 13, 15, 20]
C. [1, 5, 9, 8, 3, 2] and [20, 15, 10, 13]
D. [1, 3, 5, 8, 9, 10] and [2, 13, 15, 20]

Solution

  1. Step 1: Trace the while loop swaps

    Start with i=5 (arr1[5]=20), j=0 (arr2[0]=2). Since 20 > 2, swap: arr1[5]=2, arr2[0]=20; i=4, j=1.
    Next i=4 (15), j=1 (3): 15 > 3, swap: arr1[4]=3, arr2[1]=15; i=3, j=2.
    i=3 (10), j=2 (8): 10 > 8, swap: arr1[3]=8, arr2[2]=10; i=2, j=3.
    i=2 (9), j=3 (13): 9 > 13? No, so i=1.
    i=1 (5), j=3 (13): 5 > 13? No, so i=0.
    i=0 (1), j=3 (13): 1 > 13? No, so i=-1 loop ends.
    After swaps: arr1 = [1, 5, 9, 8, 3, 2], arr2 = [20, 15, 10, 13].
  2. Step 2: Sort both arrays after swapping

    The code sorts both arrays:
    arr1.sort() -> [1, 2, 3, 5, 8, 9]
    arr2.sort() -> [10, 13, 15, 20]
  3. Final Answer:

    [1, 2, 3, 5, 8, 9] and [10, 13, 15, 20] -> Option B
  4. Quick Check:

    Swapped and sorted arrays = [1,2,3,5,8,9], [10,13,15,20] [OK]
Hint: Swap bigger in arr1 with smaller in arr2, then sort both [OK]
Common Mistakes:
  • Not decrementing i or incrementing j correctly
  • Forgetting to sort arrays after swapping
  • Confusing indices during swaps
4. Identify the error in the following code snippet intended to merge two sorted arrays arr1 and arr2 without extra space:
def merge(arr1, arr2):
    i = 0
    j = 0
    while i < len(arr1) and j < len(arr2):
        if arr1[i] > arr2[j]:
            arr1[i], arr2[j] = arr2[j], arr1[i]
        i += 1
        j += 1
    arr1.sort()
    arr2.sort()
medium
A. Sorting arrays after swapping is unnecessary
B. Swapping elements without checking if arr1[i] is smaller
C. Incrementing both i and j in every iteration causes skipping elements
D. Using while loop instead of for loop causes infinite loop

Solution

  1. Step 1: Analyze loop increments

    Both i and j are incremented every iteration regardless of swap condition, which can skip elements that need comparison.
  2. Step 2: Explain why skipping elements is wrong

    To merge correctly, we must compare all relevant pairs. Incrementing both pointers blindly misses some comparisons, causing incorrect merge.
  3. Final Answer:

    Incrementing both i and j in every iteration causes skipping elements -> Option C
  4. Quick Check:

    Increment both pointers blindly = skip elements [OK]
Hint: Increment pointers only when appropriate to avoid skipping [OK]
Common Mistakes:
  • Incrementing both indices unconditionally
  • Not sorting arrays after swaps
  • Assuming while loop causes infinite loop here
5. Given two sorted arrays arr1 = [1, 4, 7, 8, 10] and arr2 = [2, 3, 9], how can you merge them without extra space so that after merging, arr1 contains the first 5 smallest elements and arr2 contains the remaining elements, both sorted?
hard
A. Use the gap method: compare elements at gap distance and swap if needed, reduce gap until 0
B. Concatenate both arrays and sort the combined array
C. Swap elements only if arr1[i] is greater than arr2[j], then sort both arrays
D. Copy arr2 elements into arr1 and sort arr1

Solution

  1. Step 1: Understand the gap method

    The gap method starts with a gap equal to the sum of lengths divided by 2, compares elements at gap distance across both arrays, and swaps if out of order. The gap reduces each iteration until it becomes zero.
  2. Step 2: Apply gap method to merge without extra space

    This method efficiently merges two sorted arrays in place without extra memory, ensuring both arrays are sorted and merged correctly.
  3. Final Answer:

    Use the gap method: compare elements at gap distance and swap if needed, reduce gap until 0 -> Option A
  4. Quick Check:

    Gap method merges in place without extra space [OK]
Hint: Use gap method to merge by reducing gap and swapping [OK]
Common Mistakes:
  • Trying to concatenate arrays which uses extra space
  • Sorting arrays separately without merging
  • Swapping without systematic gap reduction
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