sortowanie przez scalanie (mergesort)

0

MAm taki problem. Musze napisac program soortujacy 2 sposobami i porownoje ilosci krokow obu posobow. Napisalem program ale niedziala funkcja sortowania przzez scalanie. Jestem slaby w programowaniu, moze ktos pomoze <ort>znaleŹĆ</ort> mi jakies bledy. Ponizej zapodaje caly kod zrodlowy:
ps. pisze w delphi 7

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons, Spin, ComCtrls;

type
TForm1 = class(TForm)
RichEdit1: TRichEdit;
RichEdit2: TRichEdit;
Label1: TLabel;
Label3: TLabel;
SpinEdit1: TSpinEdit;
Label4: TLabel;
bbLosuj: TBitBtn;
bbZakoncz: TBitBtn;
bbSortuj: TBitBtn;
bbWyczysc: TBitBtn;
Label2: TLabel;
Label5: TLabel;
BitBtn1: TBitBtn;
Label6: TLabel;
Label7: TLabel;
Label8: TLabel;
Label9: TLabel;
Label10: TLabel;
Label11: TLabel;
Label12: TLabel;
Label13: TLabel;
bbZapisz: TBitBtn;
SaveDialog1: TSaveDialog;
bbWczytaj: TBitBtn;
OpenDialog1: TOpenDialog;
procedure bbZakonczClick(Sender: TObject);
procedure bbLosujClick(Sender: TObject);
procedure bbWyczyscClick(Sender: TObject);
procedure bbZapiszClick(Sender: TObject);
procedure bbWczytajClick(Sender: TObject);
procedure bbSortujClick(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
procedure RichEdit2Change(Sender: TObject);
private
procedure fenster_leeren (var n : integer);
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

var
N:INTEGER;
a : array [1..100] of INTEGER;

procedure TForm1.bbZakonczClick(Sender: TObject);
begin
close;
end;

procedure TForm1.bbLosujClick(Sender: TObject);
var
i:INTEGER;

begin

N:=StrToInt(SpinEdit1.text);
Randomize;
FOR i:=1 TO N DO
a[i]:=Random(100);

  FOR i:=1 TO N DO
   RichEdit1.Lines.Add('a ['+IntToStr(i)+'] = '+ IntToStr(a[i]));

bbLosuj.Enabled:=FALSE;

end;

procedure TForm1.bbWyczyscClick(Sender: TObject);
begin
RichEdit1.Clear;
RichEdit2.Clear;

bbLosuj.Enabled:=TRUE;
end;

procedure TForm1.bbZapiszClick(Sender: TObject);
begin
IF SaveDialog1.Execute THEN RichEdit1.lines.SaveToFile(SaveDialog1.FileName);
end;

procedure TForm1.bbWczytajClick(Sender: TObject);
begin
IF OpenDialog1.Execute THEN RichEdit1.lines.LoadFromFile(OpenDialog1.FileName);

end;

procedure TForm1.bbSortujClick(Sender: TObject);
var
i,j,k : INTEGER;
x : INTEGER;
ipor, iprze : INTEGER;

begin

ipor:=0;
iprze:=0;

for i := 1 to n - 1 do
begin
k := i;
x := A[i];

       for j := i + 1 to n do
         begin
          if A[j] < x then


             begin
              k := j;
              x := A[j];
              Inc(iprze);
             end;
         Inc(ipor);
         end;

      a[k] := a[i];
      a[i] := x;

   end;

FOR i:=1 TO N DO
RichEdit2.Lines.Add('a ['+IntToStr(i)+'] = '+ IntToStr(a[i]));

   label5.Caption:=IntToStr(ipor);
   label12.caption:=IntToStr(iprze);

end;

procedure TForm1.BitBtn1Click(Sender: TObject);
Procedure Scalanie(Var start, stop : Integer);
Var
l, m, r, sr : Integer;
tmp : array [1..100] of INTEGER;
Begin
For l:=start To stop Do tmp[l]:=a[l];
sr:=(start+stop) Div 2;
l:=start;
m:=start;
r:=sr+1;
While (m<=sr) And (r<=stop) Do
Begin
If tmp[m]<tmp[r] Then
Begin
a[l]:=tmp[m];
m:=m+1;
End
Else
Begin
a[l]:=tmp[r];
r:=r+1;
End;
l:=l+1;
End;
If m>sr Then
While r<=stop Do
Begin
a[l]:=tmp[r];
r:=r+1;
l:=l+1;
End
Else
While m<=sr Do
Begin
a[l]:=tmp[m];
m:=m+1;
l:=l+1;
End;
End;

Procedure Sort(Var l, r : Integer);
var
m : integer;
Begin

If (l<r) Then
Begin
m:=(l+r) Div 2;
Sort(l,m);
Sort(m+1,r);
Scalanie(l, m, r);
End;
End;

begin
mischsortiere(1, N);
begin
for mitte:=1 to N do
RichEdit2.Lines.Add(FloatToStr(feld[i]));
end;
end;

end.

0

Nie podawaj całego kodu .. - raczej nikomu nie będzie chciało się go czytać. Tutaj znajdziesz gotowe przykłady: http://www.google.pl/search?hl=pl&q=mergesort+pascal&lr=

A dokładniej : http://www.jcu.edu/math/faculty/eric/cs465/pascal/mergesort.txt

Trochę samodzielności..

0

Na stronie
http://gege01.prv.pl/pomoce.html
znajdz temat
"Komplet sprawozdań z laboratorium algorytmów i struktur danych (3 semestr)."
Wybierz spr_4 (wybrane metody sortowania zewnętrznego). Jest tam opisany algorytm sortowania przez scalanie (PASCAL).

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