[Pascal] problem z procedurą, bubble sort + rekurencja

0

Uczę się algorytmiki, chce napisać rekurencyjną wersje sortowania bąbelkowego. Próbowałem już na kilka sposobów i na chwile obecną mam coś takiego :

Procedure sort (var a: array of integer;
                    j: integer=1;
              licznik: integer= 0;
                 stop: Boolean= false);
var
  pom: integer;
begin
  if not(stop) then
  begin
    if j < n then
    begin
      if a[j] > a[j+1] then
      begin
        pom:= a[j];
        a[j]:= a[j+1];
        a[j+1]:= pom;
        sort (a, j+1, licznik + 1, false);
      end else
        sort (a, j+1, licznik , false);
    end else
    begin
      if licznik = 0 then
        stop:= true;
      sort (a, j, 0 , stop);
    end;
  end;
end;

Ale niestety to nie działa i nie wiem dlaczego [???] , mógł by mi ktoś pomóc i wskazać gdzie w tym kodzie może być błąd ?

0
if not(stop) then

to jest próba zrobienia pętli ? O.o ?

może

repeat

// ......

until stop

albo

while not stop do
begin

//...

end;

?

0

ale to ma być zrobione przez rekurencje a nie iteracje czyli pętle repet i for odpadają.

0
procedure Bubble(Tab:array of integer; n:integer);
var
  i,j:integer;

  procedure Exchange(a,b);
  var
    help:integer;
  begin

    help:=Tab[a];
    Tab[a]:=Tab[b];
    Tab[b]:=help;

    j:=j-1;

  end;

  procedure Check
  begin

    j:=n;

    repeat

      if T[j-1]>T[j] then
        Exchange(j-1,j);  

    until j<i ;

  end;

begin

  i:=2;

  repeat

    Check

  until j=>i and i>n

  // w tym miejscu w Tab powinny być uporządkowane liczby
  // o ile czegoś nie namotałem =D

end;

</i>
0

ale to dalej jest to samo tyle że rozbite.
Ty wiesz w ogóle co to jest rekurencja ?
To jest przykład rekurencji (silnia)

function silnia ( l : Integer) : Real;
begin
if l=0 or l=1 then
silnia:=1
else
silnia:= l* silnia(l-1);
end;

0

rekurencja - > można powiedzieć że to wywoływanie procedury samą przez się, dając jej te same dane, tak by każde wykonanie zmieniło w nich coś i przy spełnieniu odpowiedniego warunku wywołało samą siebie =]

pisząc to tam wyżej jechałem przykładzikiem który zdecydowanie chciałby używać GO TO, ale jako iż jest to lekko problematyczne spróbowałem przełożyć to na pętle, chyba działa, jak się obudzę to sprawdzę =]

0

a, dobrej nocy wszystkim życzę =]

1 użytkowników online, w tym zalogowanych: 0, gości: 1