AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Tutorials Delphi Tutorial: Sortier-Algorithmen I+II
Tutorial durchsuchen
Ansicht
Themen-Optionen

Tutorial: Sortier-Algorithmen I+II

Ein Tutorial von Daniel · begonnen am 28. Jun 2002 · letzter Beitrag vom 12. Okt 2015
 
Udontknow

Registriert seit: 17. Jun 2002
223 Beiträge
 
#10
  Alt 30. Aug 2002, 00:38
Wir müssen uns nochmal mit dem Fehler in der Routine "Partition" beschäftigen.

Was ist mit der Initialisierung "j:=r"?

Deine Funktion "Partition" schlägt fehl, wenn das letzte Element Data[r] die kleinste Wertigkeit hat.

Nimm mal folgende Zahlenfolge an :

Data[1]:=1200;
Data[2]:=1100;
Data[3]:=1000;

Führe nun Partition[1,3] durch.
Die Initialisierung belegt dann

v=Data[r]=1000,
i=l-1=0
und j=r=3.

Nachdem i einmal inkrementiert und dann die Abbruchbedingung Data[i]>=v) erfüllt wurde, gerätst du in eine Endlosschleife, die j immer weiter senkt:
Du senkst zunächst j um 1. Ab diesem Zeitpunkt ist (zumindest innerhalb der Arraygrenzen) deine Abbruchbedingung Data[j]<=v gar nicht mehr erfüllbar, da eben der niedrigste Wert der Zahlenfolge das letzte Element (r) ist, du aber eine Prüfung immer erst beim vorletzten Element ansetzt!
Bei einem TList-Objekt wie bei mir ist sowas halb so schlimm, ich bekomme dann eine Exception, bei einem Array aber "sortierst" du plötzlich Speicherbereiche, die gar nicht zum Array gehören (wenn z.B. zufälligerweise Data[-5043]=900 ist, tauscht du dann an dieser Stelle die Werte aus ).

Bei einer Initialisierung mit "j:=r+1" wäre das natürlich dann korrekt.

Was meinst du?

Cu,
Udontknow
  Mit Zitat antworten Zitat
 


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 09:19 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