fork download
  1. #include <vector>
  2. #include <iostream>
  3. #include <iomanip>
  4. #include <algorithm>
  5.  
  6. using namespace std;
  7.  
  8. void couting_sort(vector<int>& array)
  9. {
  10. if (array.size() == 0) return;
  11. auto p = minmax_element(array.begin(),array.end());
  12. int min = *p.first;
  13. int dist = *p.second - min + 1;
  14. vector<int> t(dist,0);
  15.  
  16. for(auto i: array) t[i-min]++;
  17.  
  18. for(int i = 0, idx = 0; i < t.size(); ++i)
  19. for(int j = 0; j < t[i]; ++j)
  20. array[idx++] = i+min;
  21.  
  22. };
  23.  
  24. void couting_sort_rev(vector<int>& array)
  25. {
  26. if (array.size() == 0) return;
  27. auto p = minmax_element(array.begin(),array.end());
  28. int min = *p.first;
  29. int dist = *p.second - min + 1;
  30. vector<int> t(dist,0);
  31.  
  32. for(auto i: array) t[i-min]++;
  33.  
  34. for(int i = t.size()-1, idx = 0; i >= 0; --i)
  35. for(int j = 0; j < t[i]; ++j)
  36. array[idx++] = i+min;
  37.  
  38. };
  39.  
  40.  
  41. int main(int argc, const char * argv[])
  42. {
  43. vector<int> a;
  44. for(int i = 0; i < 40; ++i)
  45. {
  46. int v = rand()%20-10;
  47. a.push_back(v);
  48. }
  49. for(int i: a) cout << i << " "; cout << "\n";
  50. cout << "\n\n";
  51.  
  52. couting_sort(a);
  53.  
  54. for(int i: a) cout << i << " "; cout << "\n";
  55.  
  56. couting_sort_rev(a);
  57.  
  58. for(int i: a) cout << i << " "; cout << "\n";
  59.  
  60. }
  61.  
  62.  
Success #stdin #stdout 0s 4392KB
stdin
Standard input is empty
stdout
-7 -4 7 5 3 5 -4 2 -1 -9 -8 -3 0 9 -7 -4 -10 -4 2 6 1 -2 -3 -1 -8 0 -8 -7 -3 5 -1 -8 -8 8 -1 -3 3 6 1 -8 


-10 -9 -8 -8 -8 -8 -8 -8 -7 -7 -7 -4 -4 -4 -4 -3 -3 -3 -3 -2 -1 -1 -1 -1 0 0 1 1 2 2 3 3 5 5 5 6 6 7 8 9 
9 8 7 6 6 5 5 5 3 3 2 2 1 1 0 0 -1 -1 -1 -1 -2 -3 -3 -3 -3 -4 -4 -4 -4 -7 -7 -7 -8 -8 -8 -8 -8 -8 -9 -10