AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

merge sort Programm

Ein Thema von Koby · begonnen am 8. Nov 2005 · letzter Beitrag vom 14. Nov 2005
Antwort Antwort
Koby

Registriert seit: 7. Nov 2005
10 Beiträge
 
Delphi 5 Professional
 
#1

Re: merge sort Programm

  Alt 14. Nov 2005, 15:06
Hallo Leute ich bin nun fertig mit dem Programm und wollte nun einmal fragen ob ihr verbesserungsvorschläge habt! schreibt einfach drauf los


Delphi-Quellcode:
unit mergesort_fertig;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls;

type
  TSortierverfahren = class(TForm)
    nsortiert_lb: TListBox;
    sortiert_lb: TListBox;
    Enter_b: TButton;
    Sort_b: TButton;
    New_b: TButton;
    End_b: TButton;
    Eingabefeld_e: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    procedure Enter_bClick(Sender: TObject);
    procedure Sort_bClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Mergesort(var List:array of integer);
    procedure New_bClick(Sender: TObject);
    procedure End_bClick(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Sortierverfahren: TSortierverfahren;
  Elements: integer;
  nsortiert: array of integer;

implementation

{$R *.DFM}

procedure TSortierverfahren.Enter_bClick(Sender: TObject);
begin
// schreibt Zahlen in die nicht sortierte Liste ein
  Sortierverfahren.nsortiert_lb.items.add(eingabefeld_e.text);
// Array wird um 1 vergrößert
  Setlength (nsortiert,Elements+1);
// hier wird es ins Array geschrieben
  nsortiert[Elements] := (StrToInt(eingabefeld_e.text));
// die Zählvariable wird um ein erhöht
  Elements:=Elements+1;
  Sortierverfahren.eingabefeld_e.text :='';
end;

procedure TSortierverfahren.Sort_bClick(Sender: TObject);
var
  i:integer;
begin
//soll Mergesort auf die nich sortierte Liste anwenden
  Sortierverfahren.Mergesort(nsortiert);
// geht alle Zahlen durch und ...
  for i:= 0 to Elements-1 do
  begin
// ... schreibt die Zahlen sortiert in die Liste ein
    Sortierverfahren.sortiert_lb.items.add(IntToStr(nsortiert[i]));
  end;
end;

procedure TSortierverfahren.Mergesort(var List:array of integer);
var
  laenge,x,y,z: integer;
  h_array1, h_array2:array of integer;
begin
//Anzahl der zu sortierenden Elemente bestimmen
  laenge:= length(List);
//Die Hilfsfelder auf halbe Länge teilen
  Setlength (h_array1, laenge div 2);
  Setlength (h_array2,(laenge + 1) div 2);
//Zahlen aus der 1. Hälfte des Quellarray ins 1. Hilfsarray kopieren
  for x:=0 to laenge div 2 - 1 do
    h_array1[x]:=List[x];
//Das gleiche für's 2. Hilfsarray...
  for y:=0 to (laenge + 1) div 2 - 1 do
    h_array2[y]:=List[y+((laenge) div 2)];
//Wenn die Feldlänge > 2, dann rufe die Prozedur rekursiv auf.
  if laenge>2 then
  begin
    mergesort(h_array1);
    mergesort(h_array2);
  end;
  z:=0;
  while (length(h_array1) <> 0) and (length(h_array2) <>0) do
  begin
//Das oberste Element vom kleineren Stapel auswählen...
    if h_array1[0]<h_array2[0] then
    begin
//...und ins Quellarray zurückschreiben
      List[z]:=h_array1[0];
//alle Array-Elemente um 1 nach vorne schieben
      for x:=0 to length(h_array1)-2 do
      begin
        h_array1[x]:=h_array1[x+1];
      end;
//Array verkleinern
      Setlength (h_array1,length(h_array1)-1);
      end
      else
// das selbe noch mal
      begin
        List[z]:=h_array2[0];
        for y:=0 to length(h_array2)-2 do
        begin
          h_array2[y]:=h_array2[y+1];
        end;
        setlength(h_array2,length(h_array2)-1);
      end;
      z:=z+1;
    end;
    if length(h_array1)<>0 then
    begin
      for x:=0 to length(h_array1)-1 do
      begin
        List[z]:=h_array1[x];
        z:=z+1;
      end;
{Nach dem Durchlauf der Schleife ist eins der Hilfsfelder auf jeden Fall leer.
Wenn das andere noch Elemente enthält, dann wird es komplett ins Quell-Array
geschrieben.}

    end;
    if length(h_array2)<>0 then
    begin
    for y:=0 to length(h_array2)-1 do
    begin
      List[z]:=h_array2[y];
      z:=z+1;
    end;
  end;
end;


procedure TSortierverfahren.FormCreate(Sender: TObject);
begin
  Elements:=0;
end;

procedure TSortierverfahren.New_bClick(Sender: TObject);
begin
  Elements:=0;
  Sortierverfahren.sortiert_lb.clear;
  Sortierverfahren.nsortiert_lb.clear;
end;

procedure TSortierverfahren.End_bClick(Sender: TObject);
begin
 close();
end;

end.

Hoffe ihr habt ein paar gute ideen!
Die Dummheit des Menschen ist unendlich, bei dem Weltraum bin ich mir noch nicht sicher!!!

A.E.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:40 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz