AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Quicksort-Rätsel

Ein Thema von striderx · begonnen am 12. Nov 2014 · letzter Beitrag vom 13. Nov 2014
Antwort Antwort
striderx

Registriert seit: 11. Feb 2007
Ort: Bergisch Gladbach
207 Beiträge
 
Delphi 10.4 Sydney
 
#1

AW: Quicksort-Rätsel

  Alt 13. Nov 2014, 00:17
>>Fehlt da nicht irgendwie das „Herz“ von Quicksort ...<<

Das passiert m. E. hier:

Delphi-Quellcode:
    while Less(tStart, 0) do Inc(tStart);
    while Less(0, tStop) do Dec(tStop);
Mit der 0 wird der Pivot-Record referenziert, der in dem Array-Element 0 enthalten ist.
  Mit Zitat antworten Zitat
striderx

Registriert seit: 11. Feb 2007
Ort: Bergisch Gladbach
207 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Quicksort-Rätsel

  Alt 13. Nov 2014, 00:34
Ich habe den Fehler gefunden - wie so oft lag er dort, wo man am wenigsten sucht:

Schuld war der Rückgabewert der Funktion 'GetArtistSurname', welche nicht alle Datensätze bis zum Ende durchlaufen und daher in einigen Fällen einen leeren String zurückgegeben hat.


Vielen Dank für Eure Bemühungen, das Brett vor meinem Kopf zu entfernen!!!

Geändert von striderx (13. Nov 2014 um 00:44 Uhr)
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#3

AW: Quicksort-Rätsel

  Alt 13. Nov 2014, 00:53
Das passiert m. E. hier:

Delphi-Quellcode:
    while Less(tStart, 0) do Inc(tStart);
    while Less(0, tStop) do Dec(tStop);
Okay, mag sein. Ich gebe zu, ich habe mir diese „iterative“ Quicksort-Variante bisher nie so genau angeschaut, weil ich das schon immer etwas verwirrend fand.

Wie auch immer, freut mich, dass du den Fehler trotzdem gefunden hast.
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#4

AW: Quicksort-Rätsel

  Alt 13. Nov 2014, 04:39
Ich gebe zu, ich habe mir diese „iterative“ Quicksort-Variante bisher nie so genau angeschaut, weil ich das schon immer etwas verwirrend fand.
Das ist keine iterative Quicksort-Variante, sondern die einfachste, nämlich die Rekursive. Die iterative Quicksort-Variante, die ich kenne, ersetzt den rekursiven Aufruf durch einen Stack, der die Indizes der zu sortierenden Teilarrays enthält.
  Mit Zitat antworten Zitat
striderx

Registriert seit: 11. Feb 2007
Ort: Bergisch Gladbach
207 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: Quicksort-Rätsel

  Alt 13. Nov 2014, 08:37
Nachtrag:

Warum der Insertion Sort aber trotz der fehlerhaften Funktion das richtige Ergebnis liefert, habe ich bislang noch nicht verstanden:

Delphi-Quellcode:
procedure tdlgMain.SortData;

var
  I: Word;
  J: Word;

begin
  for I := 1 to TotalRecs do begin
      J := I;
      aData[0] := aData[I];
      while (J > 0) and (Less(0, J - 1)) do begin
        aData[J] := aData[J - 1];
        Dec(J);
      end;
      aData[J] := aData[0];
  end;
end;
Er durchläuft zwar alle Datensätze bis zum Ende, aber benutzt halt dieselbe Funktion ...
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.603 Beiträge
 
Delphi 12 Athens
 
#6

AW: Quicksort-Rätsel

  Alt 13. Nov 2014, 08:57
Er durchläuft zwar alle Datensätze bis zum Ende, aber benutzt halt dieselbe Funktion ...
Allerdings werden dabei unterschiedliche Paare in unterschiedlicher Kombination verglichen. Wenn deine Less-Funktion nicht stabil ist, können die ulkigsten Dinge passieren.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#7

AW: Quicksort-Rätsel

  Alt 13. Nov 2014, 13:30
Ich gebe zu, ich habe mir diese „iterative“ Quicksort-Variante bisher nie so genau angeschaut, weil ich das schon immer etwas verwirrend fand.
Das ist keine iterative Quicksort-Variante, sondern die einfachste, nämlich die Rekursive. Die iterative Quicksort-Variante, die ich kenne, ersetzt den rekursiven Aufruf durch einen Stack, der die Indizes der zu sortierenden Teilarrays enthält.
Ja, bin gestern wohl irgendwie mit dem falschen Fuß aufgestanden.
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#8

AW: Quicksort-Rätsel

  Alt 13. Nov 2014, 15:02
Also wenn *ich* mit dem falschen Fuß aufgestanden bin, dann ist das mein geringstes Problem (das ich mal rekursiv und iterativ verwechsle). Insofern: Ausgeglichen, dein Gemüt, würd ich mal sagen:
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:02 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz