Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [pascal] - sortowanie przez scalanie, co jest nie tak w tym programiku
krzyszbi
post
Post #1





Grupa: Zarejestrowani
Postów: 251
Pomógł: 13
Dołączył: 15.09.2005

Ostrzeżenie: (0%)
-----


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


--------------------
Everything should be made as simple as possible, but not simpler. - A.Eainstein
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 21.08.2025 - 00:53