Einzelnen Beitrag anzeigen

Tabriel

Registriert seit: 9. Jun 2009
5 Beiträge
 
#1

Ich bitte um Erklärung eines Quellcodes

  Alt 16. Jun 2009, 20:26
Also ich bin es nochmal mit mienem Delphi Projekt QuickSort implementieren. Ich hatte ja bereits in einem anderen Thread einmal gepostet und wollte euch hier nochmal dafür danken aber ich bin jetzt auch noch dummer weise auf ein neues Problem gestoßen udn zwar habe ich tatsächlich einen Algorithmus gefunden der mein Problem behebt, auch wenn ich zu meiner Schande gestehen muss das ich es nicht selbst hin bekommen habe allerdings war das die einzige Lösung, weil durch die Tatsache das das ein Schulprojekt ist, die Zeit doch sehr drängt.

Das Problem ist folgendes mir sind einige der Begriffe und Aufrufe die hier verwendet werden einfach in keiner Art und weise ein Begriff wenn ihr mir also eventuell kurz die Funktion des Quellcodes erläutern könntet den ich poste wäre ich unglaublich dankbar

Also der Quellcode den ich gefunden habe um eine Liste zu Sortieren und gleichzeitig Vergleiche und Swaps zu zählen sieht wie folgt aus:

Delphi-Quellcode:
Procedure TWortListe quick;
begin
  Vergleiche :=0;
  Swaps :=0;
  PegelStart(round(Listenlaenge*log2(Listenlaenge))); //Dies PegelStart ist das nur eine Variabele oder was anderes? und warum log2?
  quicksort(1,Listenlaenge,vergleiche,swaps); //mit dem Aufruf Quicksort habe ich allgemein verständnisprobleme
end;

Procedure TWortListe.Quicksort(anfang,ende: Cardinal;var act, sw : Cardinal);
var linkerzeiger, rechterzeiger : Cardinal;
    mitte : string;

begin

 linkerzeiger := anfang;
  rechterzeiger := ende;
  mitte := Kollektion[(linkerzeiger+rechterzeiger)div2];
  Pegel.Position := Vergleiche; //Hier taucht der Pegel nochmal auf :?:

while(Kollektion[linkerzeiger]<mitte) do
begin
  linkerzeiger := linkerzeiger+1;
  inc(act); //Was ist act :(
end;


while(Kollektion[rechterzeiger]>mitte) do
begin
  rechterzeiger := rechterzeiger-1;
  inc(act); //Hier habe ich nochmal das selbe Problem
end;

if linkerzeiger <= rechterzeiger
then
  begin
    Tauschen(Kollektion[linkerzeiger],Kollektion[rechterzeiger]);
    linkerzeiger := linkerzeiger + 1;
    rechterzeiger := rechterzeiger - 1;
    inc(Swaps);
    inc(act);
  end; (*if*)
until rechterzeiger < linkerzeiger;
 

if anfang < rechterzeiger
  then quicksort(anfang, rechterzeiger, Vergleiche, swaps); //Hier habe ich wieder ein PRoblem mit dem Aufruf Quciksort
  if linkerzeiger < ende
  then quicksort(linkerzeiger,ende,Vergleiche,swaps); //Hier auch und ich ahb das in den Klammer nicht verstanden
end; (*quicksort*)

Also das ist mien Problem um das es sich handelt allerdings könnte natürlich jetzt das Problem auftauchen das ihr wiel ihr nur ienen Ausschnitt des Algorithmus zur verfügung habt, ihr nicth völlig verstehen könnt was das jetzt alles zu bedeuten hat aber ich vertraue auf euer Delphi wissen, dass ihr mir helfen könnt das wäre echt super genial.

Ich entschuldige mich auch für die teilweise eventuell dummen Fragen aber ich ibn einfach in keiner art und weise in der Thematik wirklich dirn bzw nicht oder noch nicth in der Lage einen solchen Algorithmus zu programmieren.

Ich danke euch jetzt schonmal für eure Mühen!!!

mfg Tabriel

[edit=mkinzler]Delphi-Tag eingefügt Mfg, mkinzler[/edit]
  Mit Zitat antworten Zitat