Einzelnen Beitrag anzeigen

Cyf

Registriert seit: 30. Mai 2008
407 Beiträge
 
Lazarus
 
#5

Re: Ich bitte um Erklärung eines Quellcodes

  Alt 16. Jun 2009, 21:08
Reformatiert/korrigiert (kein Wunder, dass du ihn so nicht verstehtst):

Delphi-Quellcode:
Procedure TWortListe.Quick; //verbessert?
begin
  //ich denk mal die sind globale Zähler oder Felder, die hier zurückgesetzt werden
  Vergleiche :=0;
  Swaps :=0;
  //PegelStart ist eine Prozedur, deren Implementierung du nicht gepostet hast, siehe Anmerkung zu Pegel
  PegelStart(round(Listenlaenge*log2(Listenlaenge)));
  //erster Parameter: "untere" sortierte Grenze, zweiter: "obere" sortierte Grenze
  //die anderen zwei Parameter zählen wohl die Vergleiche und Tauschoperationen mit (starten hier mit 0)
  quicksort(1,Listenlaenge,vergleiche,swaps);
end;

Procedure TWortListe.Quicksort(anfang, ende: Cardinal; var act, sw : Cardinal);
var
  linkerzeiger, rechterzeiger : Cardinal; //imho recht sinnlose lokale Kopien der Parameter
  mitte : string;
begin
  linkerzeiger := anfang;
  rechterzeiger := ende;
  //auch wieder irgendwas mit ner Anzeige, die die Mitte, des Sortierbereichs zeigt?
  mitte := Kollektion[(linkerzeiger+rechterzeiger)div2];
  Pegel.Position := Vergleiche; //Hier taucht der Pegel nochmal auf - vielleicht eine Progessbar o.ä.?

  while(Kollektion[linkerzeiger]<mitte) do //warum zum Henker ein Stringvergleich?
  begin
    linkerzeiger := linkerzeiger+1;
    //Was ist act - Act ist ein var Parameter der Funktion - aus deinem oberen Aufruf raus zu schließen die Tauschanzahl
    inc(act);
  end;


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

  if linkerzeiger <= rechterzeiger then //joa, der restliche Quicksort halt
  begin
    //ahh weil du eine Art Stringliste sortierst, damit ist dann auch Mitte klar (Privotelement)
    Tauschen(Kollektion[linkerzeiger],Kollektion[rechterzeiger]);
    linkerzeiger := linkerzeiger + 1;
    rechterzeiger := rechterzeiger - 1;
    inc(Swaps);
    inc(act);
  end; (*if*)
until rechterzeiger < linkerzeiger; //kompiliert das, so ohne Repeat?


  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); //Klammer = deine Parameter beim Aufruf, wie oben halt

end; (*quicksort*)
Insgesamt viel
Man kann einen Barbier definieren als einen, der alle diejenigen rasiert, und nur diejenigen, die sich nicht selbst rasieren.
Rasiert sich der Barbier?
  Mit Zitat antworten Zitat