Przywracanie własności kopca

adner
Użytkownik
Użytkownik
Posty: 635
Rejestracja: 7 lut 2008, o 19:07
Płeć: Mężczyzna
Lokalizacja: Białystok / Warszawa
Podziękował: 27 razy
Pomógł: 63 razy

Przywracanie własności kopca

Post autor: adner »

Mógłby ktoś sprawdzić, co jest nie tak w tym kodzie(przywracanie własności kopca-max)?

Kod: Zaznacz cały

int left(int i)
{
    return 2*i;
    }
int right(int i)
{
    return 2*i+1;
    }
void zamien(int &a, int &b)
{
    int temp = a;
    a=b;
    b=temp;
    }
    
    
    
void heapify(int *tab, int i)
{
    int largest;
    int l = left(i);
    int r = right(i);
    if(l<=10 && tab[l]>tab[i]){
    largest = l;}
    else {largest=i;}
    if(r<=10 && tab[r]>tab[largest])
    largest=r;
    if (largest!=i)
    {zamien(tab[i], tab[largest]);
heapify(tab,largest);}

                            
             
    }
Awatar użytkownika
argv
Użytkownik
Użytkownik
Posty: 569
Rejestracja: 27 maja 2009, o 01:27
Płeć: Mężczyzna
Podziękował: 51 razy
Pomógł: 66 razy

Przywracanie własności kopca

Post autor: argv »

Nie wiem ale masz tu mój archiwalny kod kopców

Kod: Zaznacz cały

int bk_ojciec(int i)
{
    return i >> 1;
}

int bk_lewy(int i)
{
    return i << 1;
}

int bk_prawy(int i)
{
    return (i << 1) + 1;
}

void bk_heapify(BKOPIEC *k, int i)
{
    int l = bk_lewy(i);
    int p = bk_prawy(i);
    int wiekszy, tmp;
    
    // patrzymy czy jest lewy syn i czy jest wiekszy
    wiekszy = (l <= k->ile && k->tab[l] > k->tab[i] ? l : i;
    // a pozniej czy jest prawy i czy moze jest wiekszy
    if(p <= k->ile && k->tab[p]> k->tab[wiekszy])
        wiekszy = p;
    // jesli wiekszy to jeden z synow to zmieniamy i poprawiamy w dol
    if(wiekszy != i) {
        bk_zamien(k, i, wiekszy);
        bk_heapify(k, wiekszy);
    }
}

Przy czym ja zamieniałem podając indeksy
adner
Użytkownik
Użytkownik
Posty: 635
Rejestracja: 7 lut 2008, o 19:07
Płeć: Mężczyzna
Lokalizacja: Białystok / Warszawa
Podziękował: 27 razy
Pomógł: 63 razy

Przywracanie własności kopca

Post autor: adner »

Nie wiem co to, ale na C++ mi to nie wygląda :p
Awatar użytkownika
argv
Użytkownik
Użytkownik
Posty: 569
Rejestracja: 27 maja 2009, o 01:27
Płeć: Mężczyzna
Podziękował: 51 razy
Pomógł: 66 razy

Przywracanie własności kopca

Post autor: argv »

To w C, przy czym ten mój BKOPIEC to struktura z tablicą i liczbą elementów w kopcu
Kody wyglądają tak samo więc nie wiem czemu Twój nie działa
ODPOWIEDZ