Cześć,
mam problem z algorytmem tzw. "kopcowania". Napisałem algorytm wstawiania do tablicy wartości i umieszczania go na odpowiednim miejscu zgodnie z zasadami.
Sugerowałem się tym algorytmem:
K01: Dla i = 2, ..., n: wykonuj K02...K05
K02: j ← i; k ← j div 2
K03: x ← d[i]
K04: Dopóki (k > 0) ∧ (d[k] < x): wykonuj
d[j] ← d[k]
j ← k
k ← j div 2
K05: d[j] ← x
K06: Zakończ
I uzyskałem taki kod:
void dodaj_element(int wartosc)
{
nowy_koniec(wartosc); // wstawienie nowej wartości na końcu tablicy (potrzebne gdyż ma być to dynamiczna struktura danych)
int j, k, x;
for(int i = 0; i < rozm; i++)
{
j = i;
k = j / 2;
x = kopiec[i];
while((k > 0) && (kopiec[k] < x))
{
kopiec[j] = kopiec[k];
j = k;
k = j / 2;
}
kopiec[j] = x;
}
}
Problem jest w tym, że algorytm działa poprawnie, ale dopiero od 2 elementu (1 elementu tablicy).
Oto przykład:
Z góry dziękuję za pomoc.
Pozdrawiam.
dodanie znacznika <code> dla algorytmu - Furious Programming