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.
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