Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Sortowanie przez zliczanie

Ostatnio zmodyfikowano 2016-02-03 22:19
Autor Wiadomość
LeajD
Temat założony przez niniejszego użytkownika
Sortowanie przez zliczanie
» 2016-02-03 18:29:50
Witam! Mam problem z ogarnięciem kodu w c++ z mojej książki odnośnie sortowania przez zliczanie. Mógłby mi ktoś pomóc i go objaśnić? Na przykładzie na którym było to wyjaśnione zrozumiałem a w kodzie kompletnie dziwnie to jest napisane :).
 Nie wiem o co chodzi z P[MAX] ( rozumiem że w tej linijce jest tablica zerowana ale nie wiem na jakiej zasadzie to przebiega), kiedy jest sortowana tablica, kiedy jest zliczana ilość występowania odpowienich cyfr i czym jest to "m" i "k".
C/C++
void sortuj( int T[], int n, int m )
{
    int P[ MAX ] = { 0 };
    for( i = 0; i < n; i++ ) P[ T[ i ] ] ++;
   
    int k = 0;
    for( int i = 0; i < m; i++ )
    for( int j = P[ i ]; i >= 1; j-- )
    {
        T[ k ] = i;
        k++;
    }
}
Z góry dzięki i pozdrawiam!
P-144419
pekfos
» 2016-02-03 18:31:19
Ten kod nie jest poprawny i nic nie robi.
P-144420
mateczek
» 2016-02-03 18:59:57
C/C++
int P[ MAX ] = { 0 }; // tak już jest jedna z możliwości inicjalizowania tablic !!!
for( i = 0; i < n; i++ ) P[ T[ i ] ] ++; //może miało być tak


for example !!!
reszty się domyśleć nie potrafię :P (Jest dla mnie tajemnicą co autor miał na myśli!!!)
C/C++
#include <iostream>

using namespace std;
int main() {
    const int rozmiar = 10;
    int T[ rozmiar ] { 1, 3, 1, 3, 3, 3, 2, 4, 2, 4 };
   
    int P[ 4 + 1 ] { 0 }; //maksymalna liczba w tablicy to 4!!
   
    for( int i = 0; i < rozmiar; i++ ) P[ T[ i ] ] ++;
   
    cout << "jedynka wysapila " << P[ 1 ] << "razy" << endl;
    cout << "dwojka wysapila " << P[ 2 ] << "razy" << endl;
    cout << "trojka wysapila " << P[ 3 ] << "razy" << endl;
    cout << "czworka wysapila " << P[ 4 ] << "razy" << endl;
   
}
P-144422
LeajD
Temat założony przez niniejszego użytkownika
» 2016-02-03 19:05:32
Tak dokładnie miało być
for( i = 0; i < n; i++ ) P[ T[ i ]]++
A mógłbyś wyjaśnić jeszcze czemu tam jest MAX? bo dla mnie to jakby maksymalna wartość w tablicy?
P-144423
mateczek
» 2016-02-03 19:10:20
Moim zdaniem powinno być MAX+1
To jest druga tablica MAX-elementowa. Tablica, która składa się w moim przypadku z 5 elementów
P[0] =0
P[1] =0
P[2] =0
P[3] =0
P[4] =0 //max=5

teraz jak pętla for znajdzie w tablicy "T" liczbę 3  to zwiększa o jeden element P[3] o jeden. I po modyfikacji tablica wygląda tak!!!

P[0] =0
P[1] =0
P[2] =0
P[3] =1
P[4] =0 // max=5

trochę głupawe totto ale tak jakoś działa !!!
P-144424
hit
» 2016-02-03 19:11:23
MAX oznacza maksymalną liczbę ze zbioru, który sortujesz, powiększoną o jeden - no bo po co tworzyć większą tablicę, skoro pozostała część nigdy nie zostanie wykorzystana? Chyba jednak nie do końca zrozumiałeś opis z książki.
P-144425
LeajD
Temat założony przez niniejszego użytkownika
» 2016-02-03 20:02:46
Ok, a co z tym "k" i o co chodzi w ostatniej pętli w której sie to k zwiększa?
P-144428
hit
» 2016-02-03 20:55:45
Pokaż, w którym miejscu zmienna k się zwiększa?
P-144432
« 1 » 2
  Strona 1 z 2 Następna strona