Bird
Raised Fist0
DSA Pythonprogramming~30 mins

Comparison Based vs Non Comparison Based Sorting in DSA Python - Build Both Approaches

Choose your learning style10 modes available
Comparison Based vs Non Comparison Based Sorting
📖 Scenario: You work in a small shop that needs to organize its product prices quickly. Sometimes you sort prices by comparing them, and sometimes you use a special counting method when prices are small numbers.
🎯 Goal: Learn how to sort a list of product prices using two different ways: comparison based sorting and non-comparison based sorting.
📋 What You'll Learn
Create a list of product prices
Set a maximum price value for counting sort
Write a comparison based sorting using Python's built-in sort
Write a non-comparison based sorting using counting sort
Print the sorted lists
💡 Why This Matters
🌍 Real World
Sorting prices quickly helps shops organize products and find the cheapest or most expensive items fast.
💼 Career
Understanding different sorting methods is important for software developers to choose the best way to organize data depending on the situation.
Progress0 / 4 steps
1
Create the list of product prices
Create a list called prices with these exact values: [4, 2, 7, 3, 8, 2, 5]
DSA Python
Hint

Use square brackets and commas to create the list exactly as shown.

2
Set the maximum price for counting sort
Create a variable called max_price and set it to 8, the highest price in the prices list
DSA Python
Hint

Find the highest number in the list and assign it to max_price.

3
Sort prices using comparison based and counting sort
Create a list called sorted_prices_comparison by sorting prices using the built-in sorted() function. Then create a list called sorted_prices_counting by implementing counting sort using max_price and prices
DSA Python
Hint

Use sorted() for comparison based sorting. For counting sort, count each price's frequency and then rebuild the sorted list.

4
Print the sorted lists
Print sorted_prices_comparison and sorted_prices_counting each on its own line
DSA Python
Hint

Use two print statements to show both sorted lists.

Practice

(1/5)
1. Which of the following sorting algorithms is not based on comparing elements?
easy
A. Quick Sort
B. Merge Sort
C. Counting Sort
D. Heap Sort

Solution

  1. Step 1: Understand comparison based sorting

    Comparison based sorting algorithms decide order by comparing elements pairwise, like Merge Sort, Quick Sort, and Heap Sort.
  2. Step 2: Identify non-comparison based sorting

    Counting Sort uses counting frequencies and does not compare elements directly.
  3. Final Answer:

    Counting Sort -> Option C
  4. Quick Check:

    Non-comparison based = Counting Sort [OK]
Hint: Counting Sort uses counts, no element comparisons [OK]
Common Mistakes:
  • Confusing Counting Sort with Quick Sort
  • Thinking Merge Sort is non-comparison based
  • Assuming Heap Sort doesn't compare elements
2. Which of the following is the correct syntax to call a non-comparison based sorting function counting_sort(arr) in Python?
easy
A. counting_sort(arr)
B. counting_sort arr
C. counting_sort{arr}
D. counting_sort[arr]

Solution

  1. Step 1: Recall Python function call syntax

    Functions are called with parentheses enclosing arguments, like func(args).
  2. Step 2: Match syntax with options

    Only counting_sort(arr) uses correct parentheses syntax.
  3. Final Answer:

    counting_sort(arr) -> Option A
  4. Quick Check:

    Function call uses parentheses [OK]
Hint: Use parentheses () to call functions in Python [OK]
Common Mistakes:
  • Using square brackets instead of parentheses
  • Omitting parentheses when calling functions
  • Using curly braces which are invalid for calls
3. What will be the output of the following Python code using Counting Sort on the array [4, 2, 2, 8, 3, 3, 1]?
def counting_sort(arr):
    max_val = max(arr)
    count = [0] * (max_val + 1)
    for num in arr:
        count[num] += 1
    sorted_arr = []
    for i in range(len(count)):
        sorted_arr.extend([i] * count[i])
    return sorted_arr

print(counting_sort([4, 2, 2, 8, 3, 3, 1]))
medium
A. [1, 2, 2, 3, 3, 4, 8]
B. [8, 4, 3, 3, 2, 2, 1]
C. [1, 3, 2, 4, 8]
D. [4, 2, 2, 8, 3, 3, 1]

Solution

  1. Step 1: Count frequencies of each number

    Count array will have counts: 1->1, 2->2, 3->2, 4->1, 8->1, others 0.
  2. Step 2: Build sorted array by repeating each number count times

    Sorted array is [1, 2, 2, 3, 3, 4, 8].
  3. Final Answer:

    [1, 2, 2, 3, 3, 4, 8] -> Option A
  4. Quick Check:

    Counting Sort output = sorted array [OK]
Hint: Counting Sort outputs sorted array by frequency counts [OK]
Common Mistakes:
  • Confusing original array with sorted output
  • Reversing the sorted order
  • Missing duplicates in output
4. The following code attempts to implement Counting Sort but has a bug. What is the error?
def counting_sort(arr):
    max_val = max(arr)
    count = [0] * max_val
    for num in arr:
        count[num] += 1
    sorted_arr = []
    for i in range(len(count)):
        sorted_arr.extend([i] * count[i])
    return sorted_arr

print(counting_sort([1, 4, 1, 2, 7, 5]))
medium
A. Using extend instead of append causes error
B. count array size is too small, missing last element count
C. max_val should be min_val
D. Loop range should be over arr, not count

Solution

  1. Step 1: Check count array size

    Count array size is max_val, but should be max_val + 1 to include max element index.
  2. Step 2: Identify impact of size error

    Missing last index causes IndexError or missing counts for max element.
  3. Final Answer:

    count array size is too small, missing last element count -> Option B
  4. Quick Check:

    Count array size = max_val + 1 needed [OK]
Hint: Count array must cover all values including max [OK]
Common Mistakes:
  • Ignoring off-by-one error in count array size
  • Thinking extend causes error
  • Confusing max_val with min_val
5. You have a large list of integers ranging from 0 to 1000. Which sorting algorithm is best to sort this list efficiently and why? A) Quick Sort because it has average O(n log n) time B) Counting Sort because it sorts in O(n + k) time where k is max value C) Merge Sort because it is stable and always O(n log n) D) Bubble Sort because it is simple to implement
hard
A. Quick Sort because it has average O(n log n) time
B. Bubble Sort because it is simple to implement
C. Merge Sort because it is stable and always O(n log n)
D. Counting Sort because it sorts in O(n + k) time where k is max value

Solution

  1. Step 1: Analyze input range and size

    Input values are integers from 0 to 1000, so k = 1000 is small compared to n (large list).
  2. Step 2: Choose sorting algorithm based on time complexity

    Counting Sort runs in O(n + k), which is efficient for small k and large n, better than O(n log n).
  3. Final Answer:

    Counting Sort because it sorts in O(n + k) time where k is max value -> Option D
  4. Quick Check:

    Small range + large list = Counting Sort best [OK]
Hint: Use Counting Sort for small range large list [OK]
Common Mistakes:
  • Choosing Quick Sort ignoring input range
  • Preferring Bubble Sort despite poor performance
  • Ignoring Counting Sort's linear time advantage
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