Advertisement
Shuva_Dev

Counting Sort

Jan 22nd, 2023
966
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.81 KB | None | 0 0
  1. // Counting sort
  2.  
  3. #include<bits/stdc++.h>
  4. #define endl "\n"
  5. using ll = long long;
  6.  
  7. using namespace std;
  8.  
  9. void counting_sort(vector<int> &vec) {
  10.     int mn = *min_element(vec.begin(), vec.end());
  11.     int mx = *max_element(vec.begin(), vec.end());
  12.  
  13.     int offset = (mn < 0) ? (mn*-1) : 0;
  14.     for(int i=0; i<vec.size(); i++) vec[i] += offset;
  15.  
  16.     int freq[mx+offset+1] = {0};
  17.     for(int i=0; i<vec.size(); i++) freq[vec[i]]++;
  18.  
  19.     int index = 0;
  20.     for(int elem = mn+offset; elem<=mx+offset; elem++) {
  21.         while(freq[elem]--) {
  22.             vec[index++] = elem;
  23.         }
  24.     }
  25.     for(int i=0; i<vec.size(); i++) vec[i] -= offset;
  26. }
  27.  
  28. int main() {
  29.     vector<int> ara = {-5, 10, 9, 8, -5, -2, 5, 13, 10};
  30.     counting_sort(ara);
  31.  
  32.     for(auto u:ara) cout << u << " ";
  33.    
  34.     return 0;
  35. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement