What do we understand about Counting Sort?
- One of the most effecient sorting algorithm
- Has at least 3 loops to be implemented
- Should be implemented mathematically
- Is NOT a comparison sort
- ONLY Interger values from negative to positive
- Stable algorithm
- Returns a new Array
- Time complexity
- Best is O(n+k)
- Average is O(n+k)
- Worst is O(n+k)
- Space complexity
- O(k)
function CountingSort(arr) { let max = arr[0]; let min = arr[0]; arr.forEach(val => { if (val > max) max = val; if (val < min) min = val; }); //! to account for negative numbers, we use max and min. //! e.g. 10 - (-4) = 14 Array size. //! we need a +1 position to the right for counting of left & right values let counter_size = max - min + 1; let counter = new Array(counter_size).fill(0); //! the index of counter Array indicates the value of the number in arr Array //! count the number of times the number repeats and store in index of counter Array arr.forEach((_, i) => counter[arr[i] - min]++); //! to get the starting position of the number from arr Array, //! count the previous value with current value of counter Array for (let i = 1; i < counter.length; i++) { counter[i] += counter[i - 1]; } let results = new Array(arr.length); //! skip the last element as it is not used in the result for (let i = results.length - 1; i >= 0; i--) { //! decrement the counter before assigning value to results Array of the index position //! assign results Array with original Array value at position i results[--counter[arr[i] - min]] = arr[i]; } return results; }
Top comments (0)