Advertisement
AdrianMadajewski

Sortowanie kubełkowe - Implementacja C++

Oct 16th, 2018
381
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.67 KB | None | 0 0
  1. #include <iostream>
  2. #include <climits>
  3.  
  4. using namespace std;
  5.  
  6. void bucketSort(int *tab, int n)
  7. {
  8.     // stale srodowiskowe dla
  9.     // #include <climits>
  10.     int MAX = INT_MIN;
  11.     int MIN = INT_MAX;
  12.  
  13.     // moge tez napisac
  14.     // MAX = MIN = tab[0];
  15.     // przyjmujac zerowy element
  16.     // jako zarowno MAX jak i MIN
  17.     // zaczynajac wtedy petle for od 1
  18.  
  19.     // jednoczesnie znajdowanie MIN i MAX
  20.     // metoda dziel i zwyciezaj
  21.     for(int i = 0; i < n - 1; i += 2)
  22.     {
  23.         if(tab[i] > tab[i + 1])
  24.         {
  25.             if(tab[i] > MAX) MAX = tab[i];
  26.             if(tab[i + 1] < MIN) MIN = tab[i + 1];
  27.         }
  28.  
  29.         else
  30.         {
  31.             if(tab[i] < MIN) MIN = tab[i];
  32.             if(tab[i + 1] > MAX) MAX = tab[i + 1];
  33.         }
  34.     }
  35.  
  36.     // tworzenie tablicy bucketow
  37.     int *buckets = new int[MAX - MIN + 1];
  38.     // zerowanie tej tablicy
  39.     for(int i = MIN; i <= MAX; i++) buckets[i - MIN] = 0;
  40.  
  41.     // sortowanie - zliczanie wystapien
  42.     for(int i = 0; i < n; i++)
  43.         buckets[tab[i] - MIN]++;
  44.  
  45.     // zamiana z glowna tablica
  46.     int j = 0;
  47.     for(int i = MIN; i <= MAX; i++)
  48.         // kiedy buckets ma wartosc (!= 0)
  49.         while(buckets[i - MIN]--) tab[j++] = i;
  50.         // dokonaj zamiany tab[j] = i;
  51.         // i zwieksz zmienna j o 1
  52.     delete [] buckets;
  53. }
  54.  
  55. int main()
  56. {
  57.     const int N = 10;
  58.     int tab[N] = {-16, 11, -5, 3, -3, 5, 10, 2, 9, 15};
  59.  
  60.     cout << "PRZED SORTOWANIEM: " << endl;
  61.     for(int i = 0; i < N; i++)
  62.         cout << tab[i] << " ";
  63.     cout << endl;
  64.  
  65.     bucketSort(tab, N);
  66.  
  67.     cout << "PO POSORTOWANIU: " << endl;
  68.     for(int i = 0; i < N; i++)
  69.         cout << tab[i] << " ";
  70.     cout << endl;
  71.  
  72.     return 0;
  73. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement