# Implementing Counting Sort using map in C++

Counting Sort is one of the best sorting algorithms which can sort in O(n) time complexity but the disadvantage with the counting sort is it’s space complexity, for a small collection of values, it will also require a huge amount of unused space.

So, we need two things to overcome this:

- A data structure which occupies the space for input elements only and not for all the elements other than inputs.
- The stored elements must be in sorted order because if it’s unsorted then storing them will be of no use.

So Map in C++ satisfies both the condition. Thus we can achieve this through a map.

**Examples:**

Input:arr[] = {1, 4, 3, 5, 1}

Output:1 1 3 4 5

Input:arr[] = {1, -1, -3, 8, -3}

Output:-3 -3 -1 1 8

Below is the implementation of Counting Sort using map in C++:

`// C++ implementation of the approach ` `#include <bits/stdc++.h> ` `using` `namespace` `std; ` ` ` `// Function to sort the array using counting sort ` `void` `countingSort(vector<` `int` `> arr, ` `int` `n) ` `{ ` ` ` ` ` `// Map to store the frequency ` ` ` `// of the array elements ` ` ` `map<` `int` `, ` `int` `> freqMap; ` ` ` `for` `(` `auto` `i = arr.begin(); i != arr.end(); i++) { ` ` ` `freqMap[*i]++; ` ` ` `} ` ` ` ` ` `int` `i = 0; ` ` ` ` ` `// For every element of the map ` ` ` `for` `(` `auto` `it : freqMap) { ` ` ` ` ` `// Value of the element ` ` ` `int` `val = it.first; ` ` ` ` ` `// Its frequency ` ` ` `int` `freq = it.second; ` ` ` `for` `(` `int` `j = 0; j < freq; j++) ` ` ` `arr[i++] = val; ` ` ` `} ` ` ` ` ` `// Print the sorted array ` ` ` `for` `(` `auto` `i = arr.begin(); i != arr.end(); i++) { ` ` ` `cout << *i << ` `" "` `; ` ` ` `} ` `} ` ` ` `// Driver code ` `int` `main() ` `{ ` ` ` `vector<` `int` `> arr = { 1, 4, 3, 5, 1 }; ` ` ` `int` `n = arr.size(); ` ` ` ` ` `countingSort(arr, n); ` ` ` ` ` `return` `0; ` `} ` |

*chevron_right*

*filter_none*

**Output:**

1 1 3 4 5

## Recommended Posts:

- Counting Sort
- C Program for Counting Sort
- Median and Mode using Counting Sort
- Sort an array of 0s, 1s and 2s (Simple Counting)
- Java Program for Counting Sort
- Comparison among Bubble Sort, Selection Sort and Insertion Sort
- Why Quick Sort preferred for Arrays and Merge Sort for Linked Lists?
- Counting cross lines in an array
- Bucket Sort To Sort an Array with Negative Numbers
- Insertion sort to sort even and odd positioned elements in different orders
- Program to sort an array of strings using Selection Sort
- Java Program for Odd-Even Sort / Brick Sort
- Odd Even Transposition Sort / Brick Sort using pthreads
- Serial Sort v/s Parallel Sort in Java
- Quick Sort vs Merge Sort

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.