Nie przeanalizowaliśmy wtedy działania tej funkcji w postaci w której podałeś tylko
zaproponowałem ci przykładowy sposób poprawienia tego kodu
Przedstawiam tutaj kod problematycznej funkcji
Kod: Zaznacz cały
void Przesiewanie(int l,int p, int *A)
{
int x;
int i,j;
i=l;
j=2*i+1;
while(j<=p)
{
if(j<p && A[j]<A[j+1])
j++;
if(x<A[j])
{
A[i]=A[j];
i=j;
j=2*i+1;
}
}
A[i]=x;
}
Kod Wirtha miał jeszcze instrukcję skoku którą prowadzący usunął niczym jej nie zastępując
Przyjrzyj się pętli while
Jaki jest warunek na wejście do niej ?
Kiedy jest modyfikowana zmienna j ?
Jak powinna wyglądać pętla wykonująca się w czasie \(\displaystyle{ Oleft( logleft( n
ight)
ight)}\) ?
Pytania do algorytmu
Dlaczego akurat tak są przypisane wartości początkowe zmiennym ?
Co robi pierwsza instrukcja warunkowa w pętli while ?
Za co jest odpowiedzialna druga instrukcja warunkowa w pętli while ?
Po zakończeniu pętli while jest jeszcze jedna instrukcja , dlaczego ona występuje ?
Pozostałe funkcje czyli funkcja budująca stóg oraz sortująca były dobrze napisane