[C][Algorytmy] Sortowanie Stogowe Benny

Awatar użytkownika
Mariusz M
Użytkownik
Użytkownik
Posty: 6908
Rejestracja: 25 wrz 2007, o 01:03
Płeć: Mężczyzna
Lokalizacja: 53°02'N 18°35'E
Podziękował: 2 razy
Pomógł: 1246 razy

[C][Algorytmy] Sortowanie Stogowe Benny

Post autor: Mariusz M »

Kiedyś Benny czyli użytkownik profiles/125808.htm dostał kod sortowania stogowego w C

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;
}
Zauważ że prowadzący przełożył kod procedury przesiewającej zamieszczonej u Wirtha z Pascala na C
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
Ostatnio zmieniony 11 wrz 2017, o 22:03 przez Afish, łącznie zmieniany 1 raz.
Powód: Poprawa wiadomości.
ODPOWIEDZ