Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <climits>
- using namespace std;
- void bucketSort(int *tab, int n)
- {
- // stale srodowiskowe dla
- // #include <climits>
- int MAX = INT_MIN;
- int MIN = INT_MAX;
- // moge tez napisac
- // MAX = MIN = tab[0];
- // przyjmujac zerowy element
- // jako zarowno MAX jak i MIN
- // zaczynajac wtedy petle for od 1
- // jednoczesnie znajdowanie MIN i MAX
- // metoda dziel i zwyciezaj
- for(int i = 0; i < n - 1; i += 2)
- {
- if(tab[i] > tab[i + 1])
- {
- if(tab[i] > MAX) MAX = tab[i];
- if(tab[i + 1] < MIN) MIN = tab[i + 1];
- }
- else
- {
- if(tab[i] < MIN) MIN = tab[i];
- if(tab[i + 1] > MAX) MAX = tab[i + 1];
- }
- }
- // tworzenie tablicy bucketow
- int *buckets = new int[MAX - MIN + 1];
- // zerowanie tej tablicy
- for(int i = MIN; i <= MAX; i++) buckets[i - MIN] = 0;
- // sortowanie - zliczanie wystapien
- for(int i = 0; i < n; i++)
- buckets[tab[i] - MIN]++;
- // zamiana z glowna tablica
- int j = 0;
- for(int i = MIN; i <= MAX; i++)
- // kiedy buckets ma wartosc (!= 0)
- while(buckets[i - MIN]--) tab[j++] = i;
- // dokonaj zamiany tab[j] = i;
- // i zwieksz zmienna j o 1
- delete [] buckets;
- }
- int main()
- {
- const int N = 10;
- int tab[N] = {-16, 11, -5, 3, -3, 5, 10, 2, 9, 15};
- cout << "PRZED SORTOWANIEM: " << endl;
- for(int i = 0; i < N; i++)
- cout << tab[i] << " ";
- cout << endl;
- bucketSort(tab, N);
- cout << "PO POSORTOWANIU: " << endl;
- for(int i = 0; i < N; i++)
- cout << tab[i] << " ";
- cout << endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement