Bird
Raised Fist0
DSA Goprogramming~5 mins

Counting Sort Algorithm in DSA Go - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is the main idea behind the Counting Sort algorithm?
Counting Sort counts the number of occurrences of each value in the input, then uses these counts to place elements directly into the sorted output.
Click to reveal answer
beginner
What kind of data is Counting Sort best suited for?
Counting Sort works best for sorting integers or objects that can be mapped to integers, especially when the range of input values is not much larger than the number of elements.
Click to reveal answer
intermediate
Why is Counting Sort considered a stable sorting algorithm?
Because it places elements in the output array in the order they appear in the input when counts are equal, preserving the original order of equal elements.
Click to reveal answer
intermediate
What is the time complexity of Counting Sort and why?
The time complexity is O(n + k), where n is the number of elements and k is the range of input values, because it counts occurrences and then builds the output using these counts.
Click to reveal answer
intermediate
What is a major limitation of Counting Sort?
It requires extra space proportional to the range of input values, so it is inefficient if the range is very large compared to the number of elements.
Click to reveal answer
Counting Sort is most efficient when:
AThe input contains only strings
BThe input is already sorted
CThe range of input values is small compared to the number of elements
DThe input size is very large and range is huge
What does Counting Sort use to place elements in the output array?
AComparisons between elements
BCounting the frequency of each element
CSwapping adjacent elements
DRecursive partitioning
Is Counting Sort a stable sorting algorithm?
AYes, it preserves the order of equal elements
BNo, it changes the order of equal elements
COnly if the input is sorted
DOnly for small inputs
What is the space complexity of Counting Sort?
AO(1)
BO(n)
CO(k)
DO(n + k)
Which of these is NOT a step in Counting Sort?
ASwapping elements to sort in place
BCalculating cumulative counts
CCounting occurrences of each value
DPlacing elements into output array using counts
Explain how Counting Sort works step-by-step.
Think about counting first, then using counts to find positions.
You got /4 concepts.
    What are the advantages and disadvantages of Counting Sort?
    Consider speed and memory trade-offs.
    You got /4 concepts.

      Practice

      (1/5)
      1. What is the main idea behind the Counting Sort Algorithm?
      easy
      A. Swapping adjacent elements if they are in wrong order
      B. Comparing each element with every other element
      C. Counting the number of occurrences of each element to sort
      D. Dividing the array into halves and sorting recursively

      Solution

      1. Step 1: Understand Counting Sort principle

        Counting sort counts how many times each value appears in the input.
      2. Step 2: Use counts to place elements in order

        Using these counts, it places elements directly in sorted order without comparisons.
      3. Final Answer:

        Counting the number of occurrences of each element to sort -> Option C
      4. Quick Check:

        Counting occurrences = D [OK]
      Hint: Counting sort counts elements, no comparisons needed [OK]
      Common Mistakes:
      • Thinking it compares elements like bubble sort
      • Confusing with divide and conquer methods
      • Assuming it swaps elements repeatedly
      2. Which of the following is the correct way to declare the count array in Go for counting sort when input values range from 0 to 9?
      easy
      A. count := make([]int, 10)
      B. count := make([]int, 9)
      C. count := make([]int, 11)
      D. count := make([]int, 0)

      Solution

      1. Step 1: Determine size of count array

        For values 0 to 9, we need 10 slots to count each number.
      2. Step 2: Use make function with correct length

        Using make([]int, 10) creates an integer slice of length 10, perfect for counting 0-9.
      3. Final Answer:

        count := make([]int, 10) -> Option A
      4. Quick Check:

        Length 10 for 0-9 range = A [OK]
      Hint: Count array length = max value + 1 [OK]
      Common Mistakes:
      • Using length 9 misses counting number 9
      • Using length 0 creates empty slice
      • Using length 11 wastes space unnecessarily
      3. What will be the output of the following Go code snippet using counting sort logic?
      arr := []int{4, 2, 2, 8, 3, 3, 1}
      count := make([]int, 9)
      for _, v := range arr {
          count[v]++
      }
      var sorted []int
      for i, c := range count {
          for j := 0; j < c; j++ {
              sorted = append(sorted, i)
          }
      }
      fmt.Println(sorted)
      medium
      A. [0 1 2 2 3 3 4 8]
      B. [4 2 2 8 3 3 1]
      C. [1 2 3 4 8]
      D. [1 2 2 3 3 4 8]

      Solution

      1. Step 1: Count occurrences of each number

        Count array after loop: count[1]=1, count[2]=2, count[3]=2, count[4]=1, count[8]=1, others 0.
      2. Step 2: Build sorted slice using counts

        Append each number i count[i] times: 1 once, 2 twice, 3 twice, 4 once, 8 once.
      3. Final Answer:

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

        Sorted array = [1 2 2 3 3 4 8] [OK]
      Hint: Count then expand counts in order to sort [OK]
      Common Mistakes:
      • Printing original array instead of sorted
      • Including zero counts as elements
      • Miscounting duplicates
      4. Identify the bug in this Go code snippet implementing counting sort:
      arr := []int{3, 1, 4, 1, 5}
      count := make([]int, 6)
      for _, v := range arr {
          count[v]++
      }
      var sorted []int
      for i, c := range count {
          for j := 0; j <= c; j++ {
              sorted = append(sorted, i)
          }
      }
      fmt.Println(sorted)
      medium
      A. Inner loop uses <= instead of < causing extra elements
      B. Count array size is too small for max value 5
      C. Appending index instead of value
      D. Missing initialization of sorted slice

      Solution

      1. Step 1: Check count array size

        Count array size 6 covers indices 0-5, correct for max value 5.
      2. Step 2: Analyze inner loop condition

        Inner loop uses j <= c, which runs one extra time than needed, adding one extra element per non-zero count.
      3. Final Answer:

        Inner loop uses <= instead of < causing extra elements -> Option A
      4. Quick Check:

        Loop condition off by one = A [OK]
      Hint: Use < not <= in loops counting occurrences [OK]
      Common Mistakes:
      • Ignoring off-by-one errors in loops
      • Assuming count array size error causes runtime panic
      • Confusing index and value in append
      5. Given an array with negative and positive integers: arr := []int{-2, -1, 0, 1, 2}, how can you adapt counting sort to sort this array correctly?
      hard
      A. Use counting sort directly without changes
      B. Shift all values by adding 2 to make them non-negative, then apply counting sort
      C. Sort only positive numbers and append negatives at the end
      D. Counting sort cannot be used with negative numbers

      Solution

      1. Step 1: Identify problem with negatives in counting sort

        Counting sort uses array indices as counts, so negative values cause invalid indices.
      2. Step 2: Shift values to non-negative range

        Add the absolute value of the minimum (2) to all elements, making them 0 to 4, then apply counting sort.
      3. Final Answer:

        Shift all values by adding 2 to make them non-negative, then apply counting sort -> Option B
      4. Quick Check:

        Shift negatives to zero-based index = B [OK]
      Hint: Shift negatives to zero or positive before counting [OK]
      Common Mistakes:
      • Trying to use negative indices directly
      • Ignoring negative values in sorting
      • Assuming counting sort works on all integers without adjustment
      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