Advertisement
patryk178

Counting sort for negative and float numbers ( 0.01 prec.)

Mar 7th, 2019
102
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.20 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. int mini = 0;
  6. int maxi = 0;
  7. float *koniec;
  8. void sortowanie(float T[], int n)
  9. {
  10.     mini = T[0];
  11.     maxi = T[0];
  12.  
  13.     for(int i=0;i<n;i++)
  14.     {
  15.         T[i]*=100;
  16.     }
  17.  
  18.     for(int i=0;i<n;i++)
  19.     {
  20.         if(T[i]>maxi)maxi=T[i];
  21.         else if(T[i]<mini) mini = T[i];
  22.     }
  23.  
  24.     int ile = (maxi-mini)+1;
  25.     int *zliczanie = new int [ile];
  26.     int *suma = new int [ile];
  27.     koniec = new float [n];
  28.  
  29.     for(int i=0;i<ile;i++)
  30.     {
  31.         zliczanie[i]=0;
  32.     }
  33.  
  34.     for(int i=0;i<n;i++)
  35.     {
  36.         zliczanie[(int)T[i]-mini]++;
  37.     }
  38.  
  39.     suma[0] = zliczanie[0];
  40.  
  41.     for(int i=0;i<ile;i++)
  42.     {
  43.         suma[i+1] = suma[i]+zliczanie[i+1];
  44.     }
  45.     for(int i=0;i<n;i++)
  46.     {
  47.         suma[(int)T[i]-mini]--;
  48.         koniec[suma[(int)T[i]-mini]]=T[i];
  49.     }
  50.  
  51.     for(int i=0;i<n;i++)
  52.     {
  53.         koniec[i]/=100;
  54.     }
  55.  
  56.     for(int i=0;i<n;i++)
  57.     {
  58.         cout<<koniec[i]<<", ";
  59.     }
  60. }
  61.  
  62. int main()
  63. {
  64.     int n;
  65.     cout << "Ile liczb: ";cin>>n;
  66.  
  67.     float T[n];
  68.     //int *T = new int [n];
  69.     for(int i = 0;i<n;i++)
  70.     {
  71.         cin>>T[i];
  72.     }
  73.  
  74.  
  75.  
  76.     sortowanie(T,n);
  77.  
  78.     return 0;
  79. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement