Counting Sort counts how many times each number appears, then uses these counts to place numbers in the right order without comparing them.
Click to reveal answer
beginner
What kind of data is Counting Sort best suited for?
Counting Sort works best when sorting numbers that are small and within a known range, like 0 to 100.
Click to reveal answer
intermediate
Why does Counting Sort use an extra array for counts?
The extra array keeps track of how many times each number appears, helping to place each number directly in the sorted output.
Click to reveal answer
intermediate
What is the time complexity of Counting Sort and why?
Counting Sort runs in O(n + k) time, where n is the number of elements and k is the range of input values, because it counts and places elements without comparisons.
Click to reveal answer
advanced
How does Counting Sort maintain stability (keeping equal elements in original order)?
By placing elements in the output array from right to left using the counts, Counting Sort keeps the original order of equal elements.
Click to reveal answer
What does Counting Sort use to decide the position of each element?
ASwapping adjacent elements
BThe count of each element
CRandom selection
DComparisons between elements
✗ Incorrect
Counting Sort uses the count of each element to place it directly in the sorted output.
Which of these is a limitation of Counting Sort?
AIt uses no extra memory
BIt cannot sort negative numbers
CIt is slower than bubble sort
DIt only works with numbers in a small range
✗ Incorrect
Counting Sort requires the input numbers to be in a small range to be efficient.
What is the space complexity of Counting Sort?
AO(n)
BO(k)
CO(n + k)
DO(1)
✗ Incorrect
Counting Sort uses extra space for the count array and output array, totaling O(n + k).
How does Counting Sort handle duplicate elements?
AIt counts duplicates and places them in order
BIt ignores duplicates
CIt swaps duplicates randomly
DIt removes duplicates
✗ Incorrect
Counting Sort counts duplicates and places each occurrence in the correct position.
Which step is NOT part of Counting Sort?
AComparing elements pairwise
BCounting occurrences of each number
CCalculating cumulative counts
DPlacing elements into output array
✗ Incorrect
Counting Sort does not compare elements pairwise; it uses counts instead.
Explain how Counting Sort sorts an array step-by-step.
Think about counting first, then placing.
You got /4 concepts.
Describe when and why you would choose Counting Sort over other sorting algorithms.
Consider the data range and sorting speed.
You got /4 concepts.
Practice
(1/5)
1. What is the main idea behind the Counting Sort Algorithm?
easy
A. Count the occurrences of each element and use counts to place elements in order
B. Compare each element with every other element to sort
C. Divide the array into halves and sort recursively
D. Swap adjacent elements if they are in wrong order repeatedly
Solution
Step 1: Understand Counting Sort principle
Counting sort counts how many times each value appears in the input.
Step 2: Use counts to place elements
These counts help to place each element directly into the sorted output without comparisons.
Final Answer:
Count the occurrences of each element and use counts to place elements in order -> Option A
Quick Check:
Counting occurrences = Count the occurrences of each element and use counts to place elements in order [OK]
Hint: Counting sort uses frequency counts, not comparisons [OK]
Common Mistakes:
Thinking counting sort compares elements
Confusing counting sort with merge sort
Assuming counting sort works on any data type
2. Which of the following is the correct way to declare the count array for counting sort in C++ if the input values range from 0 to 9?
easy
A. int count[9] = {0};
B. int count[10] = {0};
C. int count[11] = {0};
D. int count[] = {0};
Solution
Step 1: Determine size of count array
Input values range from 0 to 9, so we need 10 slots (0 through 9).
Step 2: Declare count array with size 10
Using int count[10] = {0}; initializes all counts to zero for indices 0 to 9.
Final Answer:
int count[10] = {0}; -> Option B
Quick Check:
Array size = max value + 1 = 10 [OK]
Hint: Count array size = max element value + 1 [OK]
Common Mistakes:
Using size 9 instead of 10
Not initializing count array to zero
Declaring count array without size
3. What is the output of the following C++ code snippet using counting sort on array arr = {4, 2, 2, 8, 3, 3, 1}?
void countingSort(int arr[], int n) {
int output[n];
int count[9] = {0};
for (int i = 0; i < n; i++)
count[arr[i]]++;
for (int i = 1; i < 9; i++)
count[i] += count[i - 1];
for (int i = n - 1; i >= 0; i--) {
output[count[arr[i]] - 1] = arr[i];
count[arr[i]]--;
}
for (int i = 0; i < n; i++)
arr[i] = output[i];
}
int main() {
int arr[] = {4, 2, 2, 8, 3, 3, 1};
int n = sizeof(arr) / sizeof(arr[0]);
countingSort(arr, n);
for (int i = 0; i < n; i++)
std::cout << arr[i] << " ";
return 0;
}
medium
A. 2 2 3 3 4 8 1
B. 8 4 3 3 2 2 1
C. 1 2 3 4 8 2 3
D. 1 2 2 3 3 4 8
Solution
Step 1: Count frequencies and cumulative counts
Count array after counting: count[1]=1, count[2]=2, count[3]=2, count[4]=1, count[8]=1; cumulative sums give positions.
Step 2: Place elements in output using counts
Elements placed in output array in sorted order: 1 2 2 3 3 4 8.
Final Answer:
1 2 2 3 3 4 8 -> Option D
Quick Check:
Sorted array = 1 2 2 3 3 4 8 [OK]
Hint: Counting sort output is sorted input array [OK]
Common Mistakes:
Not using cumulative counts correctly
Placing elements in wrong order
Using wrong count array size
4. Identify the bug in this counting sort code snippet and choose the correct fix:
void countingSort(int arr[], int n) {
int output[n];
int count[10] = {0};
for (int i = 0; i <= n; i++)
count[arr[i]]++;
for (int i = 1; i < 10; i++)
count[i] += count[i - 1];
for (int i = n - 1; i >= 0; i--) {
output[count[arr[i]] - 1] = arr[i];
count[arr[i]]--;
}
for (int i = 0; i < n; i++)
arr[i] = output[i];
}
medium
A. Initialize output array with zeros
B. Increase count array size to 11
C. Change loop to for (int i = 0; i < n; i++) in first for loop
D. Change second for loop to start from i = 0
Solution
Step 1: Check loop bounds in counting frequencies
The first for loop uses i <= n, which accesses arr[n] out of bounds (indexing error).
Step 2: Fix loop condition to i < n
Changing to i < n prevents out-of-bounds access and correctly counts frequencies.
Final Answer:
Change loop to for (int i = 0; i < n; i++) in first for loop -> Option C
Quick Check:
Loop bounds must be less than n to avoid errors [OK]
Hint: Loop over array indices from 0 to n-1 [OK]
Common Mistakes:
Using <= n instead of < n in loops
Ignoring array out-of-bounds errors
Changing unrelated loops unnecessarily
5. Given an array arr = {5, 3, 0, 2, 3, 5, 1, 4} with values ranging from 0 to 5, how would you modify the counting sort algorithm to sort this array in descending order?
hard
A. After computing cumulative counts, iterate from highest to lowest index to place elements in output
B. Reverse the input array before sorting with normal counting sort
C. Use a max heap instead of counting sort for descending order
D. Sort normally and then reverse the output array after counting sort completes
Solution
Step 1: Understand normal counting sort placement
Normal counting sort places elements from lowest to highest using cumulative counts.
Step 2: Modify placement to iterate from highest to lowest
To sort descending, iterate counts from max to min and place elements accordingly in output.
Final Answer:
After computing cumulative counts, iterate from highest to lowest index to place elements in output -> Option A
Quick Check:
Reverse iteration in placement = descending sort [OK]
Hint: Reverse placement loop for descending order [OK]
Common Mistakes:
Just reversing input without changing counting logic
Using other sorting algorithms instead of modifying counting sort
Reversing output after sorting without adjusting counts
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.