SlowSort?

3 Antworten

Stack Overflow deutet darauf hin, dass Du die Rekursion nicht abbrichst.

Das Ergebnis der Division wird irgendwann 0, vermutlich wird die Rekursion dann aber nicht abgebrochen. (dein Code ist ja vermutlich nicht vollständig - zumindest der Prozedurkopf fehlt oder/und i und j kommen "aus dem Nichts")

(Ich gehe mal davon aus, dass ihr davon ausgehen dürft, dass ein leeres Array sortiert ist)

-----

Bei einer nicht abbrechenden Rekursion logge ich gerne die Argumente, die von Rekursionsschritt zu Rekursionsschritt geändert werden. Da sieht man so was sofort.

Woher ich das weiß:Berufserfahrung – Software-Entwickler

PWolff  15.12.2017, 10:50

(Irgendwie muss ich jetzt an ForumSort denken - es werden ein paar Foren für Programmierer nach Sortieralgorithmen durchsucht und zufällig einer hiervon ausgewählt. Das Fundstück wird kompiliert und auf das Original-Array angewandt. Wenn das zurückgegebene Array sortiert ist, ist man fertig. Wenn nicht, wird ab Schritt 1 wiederholt. Bei einer unbehandelten Ausnahme wird ab Schritt 1 wiederholt. Falls das Verfahren länger als 2^(2^array.length) Sekunden dauert, wird es abgebrochen und ab Schritt 1 wiederholt.

Ich vermute, dass i eine untere Grenze, j eine obere Grenze in Deinem Array sein soll. m soll wohl das Intervall [i:j] in Drittel unterteilen. Wenn das so stimmt, dann definierst Du m falsch:

m = (j-i)/3

Und Du musst die Grenzen Deiner SlowSort korrigieren, die passen beim ersten und beim zweiten Aufruf nicht:

evenSlowerSort Extra(array,i,i+m), evenSlowerSortExtra(array,i+m+1, j-m)

Die Intervalle gehen [i:i+m], [i+m+1:j-m] und [j-m+1:j]!

Der Stackoverflow passiert IMHO, weil in Deinem ersten Aufruf "irgendwann" m<i werden kann (z.B. i=100, j=140, m = 80 (mit Deiner Definition) -> Aufruf evenSlowerSortExtra(array,100,80) ... was nicht wirklich sinnig ist)

Meine zwei Cent.