sortowanie i czas

0

witajcie mam 2 problemy

  1. podane niżej sortowanie bąbelkowe wysiada mi przy elem>25000
  2. dla elem<25000 działa ale czas nie jest poprawnie pokazywany
    użyłem timer'a ustawiłem mu interval=1 i w ontime walnąłem inc(czas)

Co jest nie tak?

var t:boolean; c:integer;

czas:=0;

 timer.enabled:=true;   {zegar on}

 repeat
 t:=true; i:=elem;
  repeat
  i:=i-1;
   if tab2[i+1]< tab2[i] then
    begin           //zamniana elementów jeżeli większy poprzedza mniejszy
    c:=tab2[i];
    tab2[i]:=tab2[i+1];
    tab2[i+1]:=c;
    t:=false;
    end;
  until i=1;
 until t=true;

 timer.enabled:=false;               {zegar off}
 
 s:='';
 for i:=1 to elem do
  begin
    s:=s+inttostr(tab2[i])+' - ';
    if i mod 20=0 then
    begin
    memo3.lines.Add(s);
    s:='';
    end;
  end;

messagebox(handle,inttostr(czas),'Czas sortowania',0);

0

Coś mi sie wydaję że to trwa straaaasznie długo z tym timerem, ja bym to zrobił przez GetTickCount i w tej pętli sprawdział czy już minęła sekunda jeśłi taaa to czas:=czas+1;
Jak źle kommbinuje to mnie poprawcie ;P

0

ja mam obliczyć rzeczywisty czas wykonania tego co jest w tej pętli, jeżeli dorzucę tam jeszcze 1 porównanie i kolejne przypisanie to czas zwiększy się i nie będzie podawał rzeczywistego czasu sortowania

0

Dobrze kombinujesz :] Najlepiej napisać tak:

czas:=GetTickCount();  //czas powinna byc typu cardinal
//
//tutaj wszystkie operacje, ktorych czas trwania chcemy zmierzyc
//
czas:=GetTickCount()-czas;
showmessage('Operacja trwała '+IntToStr(czas div 1000)+' s');

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