Bird
Raised Fist0
DSA Pythonprogramming~10 mins

Quick Sort as Divide and Conquer in DSA Python - Interactive Practice

Choose your learning style10 modes available
Practice - 5 Tasks
Answer the questions below
1fill in blank
easy

Complete the code to select the pivot element as the last item in the list.

DSA Python
def quick_sort(arr):
    if len(arr) <= 1:
        return arr
    pivot = arr[[1]]
    left = [x for x in arr[:-1] if x <= pivot]
    right = [x for x in arr[:-1] if x > pivot]
    return quick_sort(left) + [pivot] + quick_sort(right)
Drag options to blanks, or click blank then click option'
A-1
Blen(arr)
C1
D0
Attempts:
3 left
💡 Hint
Common Mistakes
Using 0 selects the first element, not the last.
Using len(arr) causes an index error.
2fill in blank
medium

Complete the code to recursively sort the left partition of the list.

DSA Python
def quick_sort(arr):
    if len(arr) <= 1:
        return arr
    pivot = arr[-1]
    left = [x for x in arr[:-1] if x <= pivot]
    right = [x for x in arr[:-1] if x > pivot]
    return [1](left) + [pivot] + quick_sort(right)
Drag options to blanks, or click blank then click option'
Asort
Bsorted
Cquick_sort
Dpartition
Attempts:
3 left
💡 Hint
Common Mistakes
Using sort or sorted returns a new sorted list but does not use recursion.
Using partition is incorrect as it's not defined here.
3fill in blank
hard

Fix the error in the partitioning condition to correctly separate elements greater than the pivot.

DSA Python
def quick_sort(arr):
    if len(arr) <= 1:
        return arr
    pivot = arr[-1]
    left = [x for x in arr[:-1] if x <= pivot]
    right = [x for x in arr[:-1] if x [1] pivot]
    return quick_sort(left) + [pivot] + quick_sort(right)
Drag options to blanks, or click blank then click option'
A>
B==
C<=
D<
Attempts:
3 left
💡 Hint
Common Mistakes
Using <= or < puts smaller elements in the wrong partition.
Using == only selects elements equal to pivot.
4fill in blank
hard

Fill both blanks to create a list comprehension that selects elements less than the pivot and squares them.

DSA Python
def process(arr):
    pivot = arr[-1]
    result = [x[1]2 for x in arr if x [2] pivot]
    return result
Drag options to blanks, or click blank then click option'
A**
B*
C<
D>
Attempts:
3 left
💡 Hint
Common Mistakes
Using * instead of ** does multiplication, not exponentiation.
Using > selects elements greater than pivot, not less.
5fill in blank
hard

Fill all three blanks to create a dictionary comprehension mapping each element to its square if it is greater than the pivot.

DSA Python
def map_squares(arr):
    pivot = arr[-1]
    result = { [1]: [2] for [3] in arr if [3] > pivot }
    return result
Drag options to blanks, or click blank then click option'
Ax
Bx**2
Dpivot
Attempts:
3 left
💡 Hint
Common Mistakes
Using different variable names inconsistently.
Using pivot instead of x in the condition.

Practice

(1/5)
1. What is the main idea behind the Quick Sort algorithm in the divide and conquer approach?
easy
A. Divide the list into smaller parts, sort them, and combine results
B. Sort the list by comparing every element with every other element
C. Use extra space to merge sorted lists
D. Sort the list by repeatedly swapping adjacent elements

Solution

  1. Step 1: Understand divide and conquer in Quick Sort

    Quick Sort divides the list into smaller parts based on a pivot, sorts each part, then combines them.
  2. Step 2: Compare with other sorting ideas

    Unlike bubble sort or merge sort, Quick Sort uses partitioning without extra space for merging.
  3. Final Answer:

    Divide the list into smaller parts, sort them, and combine results -> Option A
  4. Quick Check:

    Divide and conquer = splitting and sorting parts [OK]
Hint: Quick Sort splits and sorts parts separately [OK]
Common Mistakes:
  • Confusing Quick Sort with bubble sort
  • Thinking Quick Sort always uses extra space
  • Believing Quick Sort compares all pairs
2. Which of the following is the correct way to choose a pivot in a Quick Sort implementation in Python to avoid worst-case scenarios?
easy
A. pivot = arr[0]
B. pivot = arr[len(arr)]
C. pivot = arr[len(arr)//2]
D. pivot = arr[-len(arr)]

Solution

  1. Step 1: Identify good pivot strategies

    Pivot choice affects performance; first or equivalent leads to worst case on sorted data.
  2. Step 2: Check each option

    A and C (equivalent to first) bad for sorted input. B out of range error. D middle element helps balance partitions.
  3. Final Answer:

    pivot = arr[len(arr)//2] -> Option C
  4. Quick Check:

    Middle pivot avoids unbalanced partitions [OK]
Hint: Middle pivot balances better than first [OK]
Common Mistakes:
  • Using arr[len(arr)] causes IndexError
  • Picking first element for all cases
  • Using unusual negative indexing
3. What will be the output of the following Python code using Quick Sort?
def quick_sort(arr):
    if len(arr) <= 1:
        return arr
    pivot = arr[0]
    less = [x for x in arr[1:] if x <= pivot]
    greater = [x for x in arr[1:] if x > pivot]
    return quick_sort(less) + [pivot] + quick_sort(greater)

print(quick_sort([3, 6, 2, 7, 5]))
medium
A. [3, 2, 6, 5, 7]
B. [2, 3, 5, 6, 7]
C. [7, 6, 5, 3, 2]
D. [2, 3, 6, 5, 7]

Solution

  1. Step 1: Trace the partitioning

    Pivot is 3. less = [2], greater = [6,7,5]. Recursively sort less and greater.
  2. Step 2: Recursively sort less and greater

    quick_sort([2]) returns [2]. quick_sort([6,7,5]) picks pivot 6, less=[5], greater=[7]. Sorting less and greater gives [5] and [7].
  3. Step 3: Combine results

    quick_sort([6,7,5]) returns [5,6,7]. Final result is [2] + [3] + [5,6,7] = [2,3,5,6,7].
  4. Final Answer:

    [2, 3, 5, 6, 7] -> Option B
  5. Quick Check:

    Sorted list = [2, 3, 5, 6, 7] [OK]
Hint: Follow pivot splits and recursive calls carefully [OK]
Common Mistakes:
  • Not including pivot in final list
  • Mixing less and greater lists order
  • Forgetting base case for recursion
4. Identify the error in this Quick Sort code snippet:
def quick_sort(arr):
    if len(arr) == 0:
        return arr
    pivot = arr[0]
    less = [x for x in arr if x < pivot]
    greater = [x for x in arr if x > pivot]
    return quick_sort(less) + [pivot] + quick_sort(greater)
medium
A. Greater list should include elements equal to pivot
B. Pivot should be last element, not first
C. Less list includes pivot causing infinite recursion
D. Base case should be len(arr) <= 1, not == 0

Solution

  1. Step 1: Check base case

    len(arr) == 0 handles empty lists fine; len(arr) <= 1 is more conventional but not required here.
  2. Step 2: Analyze less and greater lists

    less takes x < pivot, greater x > pivot from entire arr. Pivot excluded correctly, but elements equal to pivot (duplicates) excluded from both.
  3. Step 3: Identify the cause of incorrect output

    Duplicates equal to pivot are lost; should partition equals into less (<=) or greater (>=).
  4. Final Answer:

    Greater list should include elements equal to pivot -> Option A
  5. Quick Check:

    Strict < and > lose duplicates [OK]
Hint: Handle equals in one partition to avoid losing duplicates [OK]
Common Mistakes:
  • Using wrong base case length
  • Including pivot in less or greater lists
  • Not handling equal elements properly
5. Given the list [4, 2, 5, 2, 3, 4], how many recursive calls will the following Quick Sort function make until fully sorted?
def quick_sort(arr):
    if len(arr) <= 1:
        return arr
    pivot = arr[0]
    less = [x for x in arr[1:] if x <= pivot]
    greater = [x for x in arr[1:] if x > pivot]
    return quick_sort(less) + [pivot] + quick_sort(greater)

quick_sort([4, 2, 5, 2, 3, 4])
hard
A. 6
B. 9
C. 5
D. 7

Solution

  1. Step 1: Trace recursive calls

    Initial call with [4,2,5,2,3,4]. Pivot=4. less=[2,2,3,4], greater=[5].
  2. Step 2: Recursive call on less=[2,2,3,4]

    Pivot=2. less=[2], greater=[3,4].
  3. Step 3: Recursive call on less=[2]

    Length 1, base case, no rec calls.
  4. Step 4: Recursive call on greater=[3,4]

    Pivot=3. less=[], greater=[4].
  5. Step 5: Recursive calls on less=[] and greater=[4]

    Both base cases, no further rec calls.
  6. Step 6: Recursive call on greater=[5]

    Base case.
  7. Step 7: Count total recursive calls

    Counting all calls including base cases: initial call + quick_sort(less) + quick_sort(greater) + recursive calls inside less and greater partitions results in 7 total calls.
  8. Final Answer:

    7 -> Option D
  9. Quick Check:

    Count each function call including base cases [OK]
Hint: Count each function call including base cases [OK]
Common Mistakes:
  • Ignoring base case calls
  • Counting only partition steps
  • Miscounting calls on empty lists
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