Ich verwende Quicksort, um Ganzzahlen zu sortieren, die Elemente in Sätzen sind, die durch Einträge auf einem Stapel dargestellt werden. Es funktioniert in Ordnung, außer wenn es größere (ungefähr 10.000 Elemente) Sätze sortiert, die zufällig bereits sortiert sind.Probleme mit Quicksort in Forth für große sortierte Arrays
: adswap \ ad1 ad2 --
over @ over @ swap rot ! swap ! ;
: singlepart \ ad1 ad2 -- ad
tuck 2dup @ locals| p ad | swap \ ad2 ad2 ad1
do i @ p < \ ad2 flag
if ad i adswap ad cell + to ad then cell \ ad2 cell
+loop ad adswap ad ; \ ad
: qsort \ ad1 ad2 -- pointing on first and last cell in array
2dup <
if 2dup singlepart >r
swap [email protected] cell - recurse
r> cell + swap recurse
else 2drop
then ;
Könnte es im Rücklaufstapel zu einem Überlauf kommen? Es ist praktisch unmöglich für das Programm, in der Spur zu bleiben, wenn das Array sortiert ist oder nicht, also wie man das Problem löst?
Danke Ruvim! Was wäre BigZ auf http://forthmath.blogspot.se/ ohne Ihre Hilfe? – Lehs