Witam :) Jeśli miałbyś ochotę, prosiłbym o odpowiedź, a na pewno takie zapytanie Cię porządnie rozwinie :)
Postanowiłem, że pouczę się kolejnych rodzajów sortowań. Tym razem padło na sortowanie kubełkowe(liczby wkłada się do kubełków, o odpowiadającym im wartościom)
Tutaj znajduje się kod:
http://wklej.org/id/1858809/
Mam drobny problem ze zrozumieniem dwóch linii w tym kodzie. A dokładnie lini 20 i 23
Czyli:for(int i=0;i<n;i++) ++pom[tab[i]-Min];
int k=0; for(int i=0;i<Max-Min+1;i++)while(pom[i]--)tab[k++]=i + Min;
Pytanie:
Linia20:
W jaki sposób ++pom[tab[i]-Min]; działa ? Tzn. domyślam się, że on zlicza ilość wystąpień danej liczby,
Tylko jak w zasadzie on działa ? Zrobiłem wypisanie tego na co wskazuje ta pomocnicza tablica i wartość wynosi 1. I to jest zrozumiałe, ale jak to się dzieje, że odejmując w pomocnicznej tablicy: tab[i]-Min, dostaje się ilość wystąpień danego wyrażenia?
Linia 23:
Zapis: tab[k++]=i+Min jest zrozumiałe, to jest po prostu zapis kolejnych liczb k do tablicy . Jednak co oznacza zapis pom[i]-- ? Oznacza to, że do czasu, gdy pętla nie będzie miała czytać z pom[i] ? I druga kwestia, jak to jest możliwe, że w linii 23 i rośnie niespotykanie szybko i osiąga wartości takie jak przy odjęciu tab[i]-Min, mimo iż w pętli for jest inkrementacja(zwiekszenie o jedno) ?
Pozdrawiam :)