Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [pascal] - sortowanie przez scalanie
Forum PHP.pl > Inne > Hydepark
krzyszbi
witam
nie wiem gdzie to wstawić więc bedzie tu ( jak coś można prznieść )
a teraz do rzeczy
mam poniższy programik który z założeni apowinien sortowac tablice przy monocy sortowania ze scalaniem
działa prawie dobrze tylko jako pierwszy element tablicy jest zawsze ten sam ( przed i po sotowaniu ) a jako drugi występuje 0 ( zero ) a od trzeciego elementu tablica jest już dobrze posortowana
co w min jest nie tak bo ja już nie mam pojecia
Kod
program sortowanie;
uses crt;
var
    tablica:array[1..100] of integer;
    temp,i,j,k,n : integer;
Procedure Scalanie(Var a : array of integer; start, stop : Integer);
Var
i, i1, i2, sr : Integer;
tmp           : array[1..100] of integer;
Begin
     For i:=start To stop Do tmp[i]:=a[i];
     sr:=(start+stop) Div 2;
     i:=start;
     i1:=start;
     i2:=sr+1;
     While (i1<=sr) And (i2<=stop) Do
     Begin
         If tmp[i1]<tmp[i2] Then
             Begin
                 a[i]:=tmp[i1];
                 i1:=i1+1;
             End
     Else
             Begin
                  a[i]:=tmp[i2];
                  i2:=i2+1;
             End;
     i:=i+1;
     End;
If i1>sr Then
While i2<=stop Do
      Begin
           a[i]:=tmp[i2];
           i2:=i2+1;
           i:=i+1;
      End
Else
While i1<=sr Do
      Begin
           a[i]:=tmp[i1];
           i1:=i1+1;
           i:=i+1;
      End;
End;
Procedure Sort(Var a : array of integer; start, stop : Integer);
Begin
If start<stop Then
Begin
Sort(a, start, (start+stop) Div 2);
Sort(a, ((start+stop) Div 2)+1, stop);
Scalanie(a, start, stop);
End;
End;
begin
     n := 100;
     clrscr;
     randomize;
     For i:=1 To 100 Do
         tablica[i] := random(30000);
     For i:=1 To 100 Do
         begin    
             write(tablica[i]:7);
             if ((i mod 8) = 0) then
                writeln;
         end;
Sort(tablica,1,n);
         writeln;
         writeln;
     For i:=1 To 100 Do
         begin    
             write(tablica[i]:7);
             if ((i mod 8) = 0) then
             writeln;
         end;
     readkey;
end.

jak ktoś kto zna pascala rzuci okiem i pokaże co robie źle będe wdzięczny
P.S. może zna ktos jakiś prosty sposób na zmieżenie czasu wykonania tego sortowania
z góry dzieki za odpowiedzi
nospor
Cytat
P.S. może zna ktos jakiś prosty sposób na zmieżenie czasu wykonania tego sortowania
No przeciez standardowy sposob, tak jak w php. zapisujesz czas przed rozpoczeciem sortowania, zapisujesz czas po skonczeniu sortowania i wyswietlasz se roznice smile.gif
krzyszbi
wim że istnieje taka procedura jak GetTime ale ina ma "rozdzielczość" tylko do 0,01 sekundy kroszke jak dla mnie mało no ale cóż najwyżej będe wykonywał kolukrotnie program a póżniej otrzumany wynik dzialił
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.