Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Sortieren von Buchstaben in einer Listbox (https://www.delphipraxis.net/140553-sortieren-von-buchstaben-einer-listbox.html)

hhhkkkaaa 20. Sep 2009 21:03


Sortieren von Buchstaben in einer Listbox
 
Hallo!
Also ich hab ein Sortierprogramm für eine Listbox mit integer Zahlen geschrieben,und möchte das jetzt auf einen String übertragen. Also eine Listbox mit Buchstaben, die dann sortiert wird.
Ich weiß, dass man das gleich auf sorted=true stellen kann, ich benutz aber verschiedene Sortiermethoden und will die geschwindigkeiten vergleichen können und sowas.
So, Problem: es werden nur die ersten Buchstaben, also alle 'a' "sortiert" angezeigt.
Ich hab nicht so viel mit strings am Hut: ist ansicomparestr das richtige hier?
hier mein Versuch:
Delphi-Quellcode:
var i, j: integer; Merke : string;
begin
   i:=2;
   while i < Laenge do
   begin
      i:=i+1;
      Merke:= Zahl[i]; //einen Buchstaben merken
      j:= i;
       while ((j > 1)and (ansicomparestr(Zahl[j-1], Merke)> 0 )) do // die beide Buchstaben vergleichen
       begin
       // Beide Buchstaben miteinader vertauschen
          Zahl[j] := Zahl[j-1];
          j := j-1;
       end;
       //Gemerkten Buchstaben auf korrekten Platz setzen
       Zahl[j] := Merke;
   end;
Zahl[] ist eig Buchstabe []... muss ich noch ändern


Danke schonmal!

Wolfgang Mix 20. Sep 2009 21:42

Re: Sortieren von Buchstaben in einer Listbox
 
Erstmal herzlich willkommen in der DP :dp:

Such 'mal im Suchfeld nach

Zitat:

3 verschiedene Sortierverfahren
Da sind die gängigen Sortierverfahren (nicht nur 3) gut erklärt.

Gruß

Wolfgang

alzaimar 21. Sep 2009 06:52

Re: Sortieren von Buchstaben in einer Listbox
 
Schau mal hier, eine wirklich schöne Seite. Dort sieht man sogar, wie die einzelnen Algorithmen arbeiten. Sehr anschaulich.

jaenicke 21. Sep 2009 07:46

Re: Sortieren von Buchstaben in einer Listbox
 
Und bei Delphi ist auch eine Demo dabei, die Threads in Kombination mit Suchalgorithmen und deren Geschwindigkeitsvergleich zeigt. ;-)
Diese liegt unter:
Code:
C:\Program Files\Borland\BDS\4.0\Demos\DelphiWin32\VCLWin32\Threads
Bzw. unter anderen Betriebssystem und Delphiversionen an leicht anderer Stelle (bei D2007/2009 z.B. in den öffentlichen Dokumenten).

hhhkkkaaa 21. Sep 2009 15:50

Re: Sortieren von Buchstaben in einer Listbox
 
erstmal danke für die antworten :)
aber ich glaube ihr habt mich ein wenig missverstanden..vllt hab ich mich auch schlecht ausgedrückt...
ich hatte weniger die frage wie sich die sortieralgorythmen unterscheiden oder wo man die nach gucken kann.. deshalb verweis ich noch mal auf die Überschrift.
Denn mein Problem ist, dass ich zwar Zahlen sortieren kann, aber das bei Buchstaben nicht hinbekomme.
Soll zum Beispiel anna sortiert werden kommt nur : aa oder wenn besen sortiert wird nur : b

DeddyH 21. Sep 2009 16:17

Re: Sortieren von Buchstaben in einer Listbox
 
Zitat:

Delphi-Quellcode:
var i, j: integer; Merke : string;
begin
   i:=2;
   while i < Laenge do
   begin
      i:=i+1; //i ist jetzt 3, ist das Absicht?
      Merke:= Zahl[i];
      j:= i; //j ist jetzt auch 3
      //Man könnte die Buchstaben auch ohne Stringfunktionen direkt vergleichen
      while ((j > 1)and (ansicomparestr(Zahl[j-1], Merke)> 0 )) do
      begin
        //Das Folgende ist kein Tausch!
        Zahl[j] := Zahl[j-1];
        j := j-1;
      end;
      //Jetzt müssten die ersten beiden Buchstaben gleich sein (s.o.)
      //Erster Buchstabe bekommt jetzt den Wert des vormals 3.      
      Zahl[j] := Merke;
   end;


hoika 21. Sep 2009 18:12

Re: Sortieren von Buchstaben in einer Listbox
 
Hallo,

der ganz normale String-Vergleich sollte doch reichen ?

Delphi-Quellcode:
sStr_1:= 'anna';
sStr_2:= 'besen';
bBool:= sStr_1<sStr_2;
bBool wäre True;

Man könnte auch noch UpperCase
und auch AnsiCompareStr+UpperCase benutzen.


Heiko

himitsu 21. Sep 2009 19:18

Re: Sortieren von Buchstaben in einer Listbox
 
AnsiCompareStr+UpperCase = AnsiCompareText

ist bei vielen Prozeduren dieser Art so:
...Str = CaseSensitive
...Text = nicht CaseSensitive


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:02 Uhr.

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