Entwickler-Ecke

Algorithmen, Optimierung und Assembler - Zahlen in memo sortieren aber selbst programmiert


läpi - Mi 06.09.06 08:25
Titel: Zahlen in memo sortieren aber selbst programmiert
hallo liebe freunde

ich soll in meinem programm zahlen in einer memo ausgeben dies habe ich auch geschafft.
allerdings soll ich jetzt diese zahlen per buttondruck nun sortieren und das alles nicht mit bubblesort oder sowas sondern mit einer selbst programmierten sortierung kann mir da jemand helfen ?


danke


Miri - Mi 06.09.06 08:29

äh, du sollst ohne sortier-algo sortieren?!


läpi - Mi 06.09.06 08:35

joa
aber wenn du einen guten algo kennst der recht einfach ist kannst du mir den schreiben?


Gausi - Mi 06.09.06 08:57

Einfach sind z.B. Bubblesort, Sortieren durch Auswahl, Sortieren durch Einfügen.

Schwieriger sind Heapsort, Mergesort, Quicksort.

Schwachsinnig ist Bogosort.

Fast alles weitere, was man sich so ausdenken kann, basiert im Wesentlichen auf diesen Algorithmen. Es mag zwar noch ein paar andere Verfahren geben, aber das sind imho die gängigsten.

Zu allen (außer evtl. dem letzten) gibt es hier im Forum Threads und fertigen Quelltext.


läpi - Mi 06.09.06 09:01

jo habe aber nochmal nachgefragt wir sollen wirklich ohne algo das machen
sprich mit eigenen variabelen die dann jedes zeile in meiner memo(dort gebe ich die zahlen aus)
miteinander vergleicht und dann die zahlen der reihenfolge nach ausgibt


DaKirsche - Mi 06.09.06 09:03

Darfst du nun einen Sortieralgorythmus verwenden oder nicht?

Also wenn du einen verwenden darfst, dann mache doch folgendes :

Prüfe, für die Anzahl der Zahlen - 1, ob die folgende Zahl kleiner ist und vertausche die gegebenenfalls.

Nehmen wir an, du tippst in jeder Zeile deines Memos eine Zahl und gibst insgesamt 100 Zahlen ein.

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
procedure TForm1.SortMemoList();
var
ZahlenArray : array [0..100of Integer;     //Hier werden die Zahlen drin gespeichert
x,y : Integer;      //Das sind Counter für die Schleifen
TempInt : Integer;  //Dies ist die Tauschvariable
Anzahl : Integer;   //Anzahl eingetragener Werte im Memo
begin
//Anzahl der Werte weden bestimmt
Anzahl := Memo1.Lines.Count;
//Jetzt werden die Zahlen aus dem Memo in ein Array eingelesen
 For x := 0 to (Anzahl - 1do begin
   ZahlenArray[x] := StrToInt(Memo1.Lines[x]);
 end;
//Jetzt beginnt die Sortierung
 For x := 0 to (Anzahl - 2do begin
   For y := 0 to (Anzahl - 2do begin
       if ZahlenArray[y] > ZahlenArray[y+1then begin
          TempInt := ZahlenArray[y+1];
          ZahlenArray[y+1] := ZahlenArray[y];
          ZahlenArray[y] := TempInt;
       end;
   end;
 end;
//Und dann fehlt noch die Ausgabe
 For x := 0 to Anzahl -1 do begin
   Memo2.Lines.Add(IntToStr(ZahlenArray[x]));
 end;

end;


Moderiert von user profile iconGausi: Code- durch Delphi-Tags ersetzt


läpi - Mi 06.09.06 09:07

nein ich darf keinen verwenden ich soll einfach jede zeile mit der folgenden vergleichen wenn also die erste zahl höher ist als die nächste sollen die zahlen getauscht werden
ist die nächste zahle wierder höher muss wieder getauscht werden ist die zahl niedriger soll sie stehen bleiben und die nächste zahl muss überprüft werden


ALSO OHNE ALGO

nur mit einfachen variabeln die sich die zahlen merken


Miri - Mi 06.09.06 09:09

also,was du erklärst, ist ein algo und (wenn ich jetzt nicht total mitm schädel vor die wand gelaufen bin) is das bubble-sort...


Gausi - Mi 06.09.06 09:32

Jep, wenn man um diese Erklärung noch ein "Wiederhole solange, bis in einem Durchlauf keine Vertauschung mehr aufgetreten ist" drumrum packt, dann ist das Bubblesort.

Dass man das direkt auf den Einträgen in der Memo machen soll, wobei man ständig die darin enthaltenen Strings in Zahlen umwandeln muss, ist mir schleierhaft. Ebenso unverständlich ist es, dass man das Verfahren so streng an die Ausgabe koppeln soll.

Da wird mal wieder schlechter Programmierstil gelehrt...


DaKirsche - Mi 06.09.06 09:39

und wenn du es so kompliziert machen sollst, dann löse doch einfach die Schleife auf....

dann hast du nur einen langen Quelltext, der dasselbe macht, wie der kurze mit Algo.