Array Sortieren

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
Bauer321
Beiträge: 465
Registriert: Sa 21. Aug 2010, 21:30
OS, Lazarus, FPC: Windows 7 Ultimate (L 1.2.2 FPC 2.6.4 32-bit)
CPU-Target: 64-Bit
Wohnort: nahe Bremen
Kontaktdaten:

Array Sortieren

Beitrag von Bauer321 »

Hallo,

wir solen in der Schule einen Array sortieren. Darin sind integerzahlen. da mir nicht wirklich ne idee in den kopf kam wie ich das machen soll habe ich folgendes versucht:

Code: Alles auswählen

procedure sort();
var
  tmp : TStringList;
  n : integer;
begin
  tmp.Create; // Stringlist erstellen
  for n := 0 to 999 do tmp.Add(Inttostr(zahl[n])); // in die Stringlist die Werte des Arrays eintragen
  tmp.Sort; // die StringList Sortieren(ich meine das gibt es vll täusche ich mich aber auch)
  setzero(); // mein array mit nullen überschreiben (das ist garantiert nicht der fehler)
  for n := 0 to 999 do zahl[n] := strtoint(tmp[n]); //die Werte der Stringlist zurück in den Array laden
  tmp.free; //Stringlist löschen, entfernen was auch immer^^
end;
ist das so zumindestens ansatzweise brauchbar oder ganz und gar falsch, bzw was muss ich anderes machen oder was für alternativen sind am besten geeignet?
www.mcpatcher.net | www.hoeper.me

Eb
Lazarusforum e. V.
Beiträge: 242
Registriert: Di 5. Feb 2008, 15:32
OS, Lazarus, FPC: Linux Mint - Laz 2.2.0
CPU-Target: 64Bit
Wohnort: Stuttgart

Re: Array Sortieren

Beitrag von Eb »

Sortieralgorithmen gibt es jede Menge.
Ein klassischer Algorithmus nennt sich 'Bubblesort'.
Grundidee ist:
Man hat n Elemente und durchläuft sie alle.
Man beginnt mit dem ersten Element und vergleicht dieses nacheinander mit allen nachfolgenden,
immer das kleinste Element des Vergleiches kommt an die vorderste Stelle.
Nach einem Durchgang steht das kleinste Element an der ersten Stelle.
Nun vergleicht man das zweite Element mit allen folgenden, nach dem zweiten Durchgang steht das zweitkleinste an zweiter Stelle.
Nun kommt der dritte Durchgang usw.
Programmiertechnisch löst man dies mit Schleifen - aber machen musst du es alleine :wink:

Benutzeravatar
theo
Beiträge: 10927
Registriert: Mo 11. Sep 2006, 19:01

Re: Array Sortieren

Beitrag von theo »

Bauer321 hat geschrieben:ist das so zumindestens ansatzweise brauchbar oder ganz und gar falsch, bzw was muss ich anderes machen oder was für alternativen sind am besten geeignet?
Kaum, der wird Strings sortieren und nicht Zahlen. D.h. alles was mit 1 anfängt kommt vor 2, egal wie viele Stellen es hat.
Wenn du das so machen willst, dann nimm wenigstens CustomSort, besser aber gleich eine TList, bei der du den Sort auch mit einem eigenen Compare machen kannst (Pointer auf integer casten).
Sonnst halt das Array "von Hand" sortieren. Den Algorithmus gibt's z.B. bei TFPList Sort zu bewundern (QuickSort).

Jochen
Beiträge: 35
Registriert: So 30. Nov 2008, 23:35

Re: Array Sortieren

Beitrag von Jochen »

Dein Array ist 1-dimensional, bleibt das so?
Ich hab mir mal zu Übungszwecken eine Klasse IntList geschrieben, mit Quicksort und anderem Zeug. Viellcht kannst du damit was anfangen. Verbessungsvorschläge willkommen!


Jochen
Dateianhänge
IntList.pas
(3.79 KiB) 109-mal heruntergeladen

Benutzeravatar
theo
Beiträge: 10927
Registriert: Mo 11. Sep 2006, 19:01

Re: Array Sortieren

Beitrag von theo »

Jochen hat geschrieben:Verbessungsvorschläge willkommen!
Geht mittlerweile auch einfacher mit Generics

Code: Alles auswählen

uses  fgl;
...
type
  TIntegerList = specialize TFPGList<Integer>;
...
 
function MySort(const Item1, Item2: Integer): Integer;
begin
  if Item1=Item2 then Result:=0 else
  if Item1<Item2 then Result:=-1 else Result:=1;
end;
 
procedure TForm1.Button1Click(Sender: TObject);
var IL:TIntegerList;
  i:integer;
begin
  IL:=TIntegerList.Create;
  IL.Add(231);
  IL.Add(123);
  IL.Add(321);
  IL.Sort(@MySort);
  For i:=0 to IL.count-1 do writeln(IL[i]);
  IL.free;
end;

Bauer321
Beiträge: 465
Registriert: Sa 21. Aug 2010, 21:30
OS, Lazarus, FPC: Windows 7 Ultimate (L 1.2.2 FPC 2.6.4 32-bit)
CPU-Target: 64-Bit
Wohnort: nahe Bremen
Kontaktdaten:

Re: Array Sortieren

Beitrag von Bauer321 »

@theo: kannst du deinen code bitte noch ein wenig kommentieren?
ich steig da kein bisschen durch ...
www.mcpatcher.net | www.hoeper.me

Benutzeravatar
theo
Beiträge: 10927
Registriert: Mo 11. Sep 2006, 19:01

Re: Array Sortieren

Beitrag von theo »

Bauer321 hat geschrieben:@theo: kannst du deinen code bitte noch ein wenig kommentieren?
ich steig da kein bisschen durch ...
Wo denn? Generics sind hier beschrieben: http://www.freepascal.org/docs-html/ref/refch8.html" onclick="window.open(this.href);return false;

Bauer321
Beiträge: 465
Registriert: Sa 21. Aug 2010, 21:30
OS, Lazarus, FPC: Windows 7 Ultimate (L 1.2.2 FPC 2.6.4 32-bit)
CPU-Target: 64-Bit
Wohnort: nahe Bremen
Kontaktdaten:

Re: Array Sortieren

Beitrag von Bauer321 »

thx ich habs jetzt hinbekommen;)
www.mcpatcher.net | www.hoeper.me

Antworten