Delphi-PRAXiS
Seite 1 von 4  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Prism Min-Sort Verfahren (https://www.delphipraxis.net/103852-min-sort-verfahren.html)

delphi_master 22. Nov 2007 18:09


Min-Sort Verfahren
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hi Leute
Ich brauche dringend hilfe in der Schule müssen wir als Hausübung Zuffalsgenerierte Zahlen in einem memo ausgeben und dies dann sortiert in einem zweiten ausgeben. Das ganze soll mit dem Min - Sort Verfahren geschehen doch leider habe ich keine Ahnung wie das gehen soll :gruebel: !!! Könnt ihr mir bitte helfen :?: Ich habe den Arbeitsauftrag per email bekommen (ich häng in euch an )

guidok 22. Nov 2007 18:23

Re: Min-Sort Verfahren
 
Naja, steht doch im Text, oder?

Suche in deinem Array den kleinsten Wert und schreibe ihn an die erste Stelle in der Ausgabeliste. Danach suchst du aus dem verbleibenden Rest, den kleinsten Wert und schreibst ihn an die nächste Stelle in der Ausgabeliste, usw.

DP-Maintenance 22. Nov 2007 18:25

DP-Maintenance
 
Dieses Thema wurde von "Matze" von "Neuen Beitrag zur Code-Library hinzufügen" nach "Sonstige Fragen zu Delphi" verschoben.
Hier gehören nur funktionierende Code-Snippets hinein.

quendolineDD 22. Nov 2007 18:44

Re: Min-Sort Verfahren
 
Schaut man mal über Google, wie der Sortieralgorithmus funktioniert bekommt man sogar bei Wikipedia den fertigen Pascal-Code :-P

Delphi-Quellcode:
{ MinSort, als eine Variante von SelectionSort }
{ Uebergabe: Zu sortierendes Array, das an den Stellen 1 bis n mit natuerlichen Zahlen belegt ist }
Procedure MinSort(Var Feld: Array Of LongInt);
Var
  i, j    : LongInt; { Zaehlvariablen }
  Temp, Min: LongInt; { Zwischenspeicher, Minimum }
Begin
  For i := 0 To High(Feld) Do Begin
    Min := i;
    For j := i + 1 To High(Feld) Do
      If Feld[j] < Feld[Min] Then Min := j;
    Temp := Feld[Min];
    Feld[Min] := Feld[i];
    Feld[i] := Temp;
  End;
End; { Procedure MinSort }
Hab ihn nicht getestet, dürfte aber korrekt sein.

Wenn zum Beispiel in Edit1 die Länge des Arrays (Anzahl dessen Felder) eingegben werden soll, dann geht das wie folgt:

Delphi-Quellcode:
iArray = array of integer;
und im Quelltext:

Delphi-Quellcode:
if TryStrToInt(Edit1.Text, x) then begin
setlength(iArray, x);
for i := 0 to x do iArray[i] := Random(100)
else
ShowMesage('Fehlerhafte Eingabe. +'Edit1.Text'+ entspricht keinem Integer!');
end;
Vergiss nicht in der FormCreate Randomize; aufzurufen um den Zufallsgenerator zu initialisieren.

grenzgaenger 23. Nov 2007 18:08

Re: Min-Sort Verfahren
 
Zitat:

Zitat von guidok
Naja, steht doch im Text, oder?

Suche in deinem Array den kleinsten Wert und schreibe ihn an die erste Stelle in der Ausgabeliste. Danach suchst du aus dem verbleibenden Rest, den kleinsten Wert und schreibst ihn an die nächste Stelle in der Ausgabeliste, usw.

sag mal, ist das nicht der selectionsort?? :roll:

quendolineDD 23. Nov 2007 18:10

Re: Min-Sort Verfahren
 
Jap und zum Selectionsort gehören auch Min- und Maxsort :)

grenzgaenger 23. Nov 2007 18:23

Re: Min-Sort Verfahren
 
Zitat:

Zitat von quendolineDD
Jap und zum Selectionsort gehören auch Min- und Maxsort :)

nicht dass ich wüsste. das asc/dsc gibt ja nur die sortierrichtung an... ist aber kein eigenständiges sortierverfahren...

GreenHorn3600 23. Nov 2007 19:04

Re: Min-Sort Verfahren
 
Mal 'n wenig QällKot spendier:
Delphi-Quellcode:
unit a_scheiss;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Memo1: TMemo;
    Memo2: TMemo;
    procedure Button3Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private-Deklarationen }
    za: array [1 .. 20] of integer;
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  i,x,y: integer;
begin
  memo1.Clear; memo2.Clear;
  for I := 1 to 20 do za[i] := i;
  for I := 1 to 20 do
  begin
    x := random(20-i)+1;
    y := za[i];
    za[i] := za[x];
    za[x] := y;
  end;
  for i := 1 to 20 do
    memo1.Lines.Add(inttostr(za[i]));
end;

procedure TForm1.Button2Click(Sender: TObject);
var
  i,j,m,x: integer;
begin
  for I := 1 to 20 do
  begin
    x := i;
    for j := i+1 to 20 do
      if za[x] > za[j] then
        x := j;
      begin
        m := za[x];
        za[x] := za[i];
        za[i] := m;
      end;
    memo2.Lines.Add(inttostr(za[i]));
  end;
end;

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

procedure TForm1.FormCreate(Sender: TObject);
begin
  randomize;
end;

end.
Delphi-Quellcode:
object Form1: TForm1
  Left = 0
  Top = 0
  Caption = 'A Scheiß'
  ClientHeight = 216
  ClientWidth = 335
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'Tahoma'
  Font.Style = []
  OldCreateOrder = False
  OnCreate = FormCreate
  PixelsPerInch = 96
  TextHeight = 13
  object Button1: TButton
    Left = 4
    Top = 6
    Width = 75
    Height = 25
    Caption = 'erzeuge'
    TabOrder = 0
    OnClick = Button1Click
  end
  object Button2: TButton
    Left = 4
    Top = 32
    Width = 75
    Height = 25
    Caption = 'max sort'
    TabOrder = 1
    OnClick = Button2Click
  end
  object Button3: TButton
    Left = 4
    Top = 58
    Width = 75
    Height = 25
    Caption = 'close'
    TabOrder = 2
    OnClick = Button3Click
  end
  object Memo1: TMemo
    Left = 83
    Top = 0
    Width = 122
    Height = 213
    Lines.Strings = (
      'Memo1')
    TabOrder = 3
  end
  object Memo2: TMemo
    Left = 206
    Top = 0
    Width = 123
    Height = 213
    Lines.Strings = (
      'Memo2')
    TabOrder = 4
  end
end
//Edit: mal nachgelesen hab

quendolineDD 26. Nov 2007 19:30

Re: Min-Sort Verfahren
 
Zitat:

Zitat von grenzgaenger
Zitat:

Zitat von quendolineDD
Jap und zum Selectionsort gehören auch Min- und Maxsort :)

nicht dass ich wüsste. das asc/dsc gibt ja nur die sortierrichtung an... ist aber kein eigenständiges sortierverfahren...

Zitat:

Zitat von Wikipedia
Der Begriff Sortierlese oder Selection-Sort (englisch selection »Auswahl«, to sort »sortieren«), auch MinSort (von Minimum) bzw. MaxSort (von Maximum), Selectsort oder ExchangeSort (AustauschSort) genannt, bezeichnet einen naiven Sortieralgorithmus, der in-place arbeitet und in seiner Grundform instabil ist, wobei er sich auch stabil implementieren lässt. Die Komplexität von SelectionSort ist, in der Landau-Notation ausgedrückt, O(n2).

http://de.wikipedia.org/wiki/Selectionsort
Ganz oben, die Erläuterung. Ich beziehe mich darauf.

cobi23 4. Mär 2013 10:54

AW: Min-Sort Verfahren
 
Hallo,

ich wollte das auch mal ausprobieren, aber bei mir kommt irgendwie immer ein Fehler. Könnt ihr mir dabei helfen?
:?:
Code:
unit USelect;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls;

type

  { TForm1 }

  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Memo1: TMemo;
    Memo2: TMemo;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { private declarations }
    za: array [1..20] of integer;
  public
    { public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.lfm}

{ TForm1 }

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

procedure TForm1.Button2Click(Sender: TObject);
var
  i,x,y:Integer;
  begin
    memo1.Clear; memo2.Clear;
    for I:= 1 to 20 do za[i] :=i;
    for I:= 1 to 20 do
    begin
      x:=Random(20-i)+1;
      y:=za[i];
      za[i]:=za[x];
      za[x]:=y;
      for i:= 1 to 20 do
      memo1.Lines.Add(inttostr(za[i]));
    end;
end;

procedure TForm1.Button3Click(Sender: TObject);
var i,j,m,x:integer;
  begin
  for I:= 1 to 20 do
  begin
    x:=i;
    for j:=i+1 to 20 do
    if za[x] > za[j] then
    x:=j;
    begin
      m:=za[x]
      za[x] := za [i];
      za[i] := m;
      end;
    memo2.Lines.Add(inttostr(za[i]));
    end;
  end;
end;

procedure TForm1.FormCreate(Sender:TObject);
begin
randomize;
end;

end.
Bei mir erscheint dann "uselect.pas(57,12) Error: Illegal assignment to for-loop variable "i" "
Ich verstehe da nicht was von mir verlangt wird.


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:51 Uhr.
Seite 1 von 4  1 23     Letzte »    

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz