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 5Input: 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; } |
1 1 3 4 5
Recommended Posts:
- Counting Sort
- C Program for Counting Sort
- Sort an array of 0s, 1s and 2s (Simple Counting)
- Median and Mode using Counting Sort
- 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
- C/C++ Program for Odd-Even Sort / Brick 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.