Na FreeHostingu Endora běží desítky tisíc webů. Přidejte se ještě dnes!
Vytvořit web zdarmaNa FreeHostingu Endora běží desítky tisíc webů. Přidejte se ještě dnes!
Vytvořit web zdarmaProcedure Bublifuk(var pole:array of integer); var z:boolean; n,j,k,i,ii:integer; begin n:=high(pole)-1; repeat z:=false; i:=0; while i<=n do begin j:=pole[i]; ii:=i+1; k:=pole[ii]; if j>k then begin pole[i]:=k; pole[ii]:=j; z:=true; end; i:=ii; end; until not Z; end;Tato implementace pat mezi ty pokroilej. Navc jsem se pokusil ji maximln optimalizovat. Vidte, e prvky se v kadm posouvaj vdy maximln o jedno msto v poli a vdy jednm smrem. Tento postup se d v nkterch ppadech urychlit obasnou zmnou pohybu prvk. Takto vylepen bublifuky se nazvaj Petsac algoritmy.
Procedure BublifukTurbo(var pole:array of integer); var i,j,l,k,n:integer; begin i:=0; j:=0; l:=0; k:=1; n:=high(pole); while k>=i do begin k:=-1; while n>k do begin inc(k); l:=pole[k]; if j>l then begin pole[i]:=l; inc(i); pole[k]:=j; end; if l>j then begin i:=k; j:=pole[k]; end; end; j:=0; n:=i-1; end; end;Dleit ovem v tuto chvli nen sloitost zpisu, ale co um. Tedy, kolik seere pamti a jak je rychl. Je zejm, e si dr kladnou vlastnost vech bublifuk, kterou je minimln pamov nronost.
{!Bude chtit unit Crt!} const max=5000; pocet_pulzu = 300; var pole:array[0..max] of integer; i,x,d:longint; begin randomize; x:=0; d:=MemW[Seg0040:$6c]; while d=MemW[Seg0040:$6c] do; {pockam, az skonci aktualni pulz} repeat for i:=0 to max do begin pole[i]:=random(80); {pole naplnim nahodnymi cisly} (*write(pole[i],' ');*) {pokud bys je chtel videt, tak tohle odkomentuj} end; (*writeln;readln;*) Bublifuk{Turbo}(pole); {Tridici rutina. Napred zkus jednu varianu, pak druhou} (*for i:=0 to 152 do {zase - kdybys chtel videt setridene pole...} begin write(pole[i],' '); end;*) inc(x); until MemW[Seg0040:$6c]>d+pocet_pulzu; writeln('Probehlo ',x,' cyklu.'); readln; writeln; writeln; end.