Syntax
x = QSortAtPos( [fromX][, toX][, pos][, len] ) [;]
Beschreibung
Implementierung des Quick-Sort-Algorithmus als interne REXX-Prozedur.
Sortiert wird die Teilzeichenkette einer Stem-Variablen ab der angegebenen
Position und mit der angegebenen Länge. Die Adresse der Stem-Variablen
muss über die REXX-Anweisung Expose an die Prozedur übergeben
wurde.
Aufrufparameter
fromX
Anfangsindex der Stem-Variablen. Ab diesem Index wird die Stem-Variable
sortiert.
toX
Endindex der Stem-Variablen. Bis zu diesem Index wird die Stem-Variable
sortiert.
pos
Anfangsposition in der Stem-Variablen ab der die zu sortierende Teilzeichenkette
startet.
len
Länge der Teilzeichenkette in der Stem-Variablen
Standardwerte
Parameter
Zugewiesene Standardwert
len
Jeweilige Länge der aktuellen vergleichbaren Stem-Variablen stem.k
verkleinert um die Startposition (pos - 1)
Bemerkungen
Die Funktion sortiert die Teilzeichenketten ab der Position pos
mit der Länge len. Wenn diese Parameter nicht angegeben werden,
so werden die ganzen Sätze der Stem-Variablen sortiert.
Die Stem-Variable stem.0 muss die Anzahl der Sätze in den
Stem-Variablen stem. beinhalten, wenn der Aufrufparameter toX
nicht verwendet wird.
Diese Implementierung sortiert in der aufsteigenden Reihenfolge - kleineren
Elemente zuerst.
Sourcecode
/*================( Quick sort at position )================*/
QSortAtPos: Procedure Expose stem.
Arg left, right, sPos, sLen
If Datatype( fromX, "NUM" ) = 0 | fromX < 1 Then fromX = 1
If Datatype( toX, "NUM" ) = 0 | toX > stem.0 Then toX = stem.0
If right > left Then Do
i = left
j = right
k = (left+right)%2
If DataType( sPos, 'NUM' ) = 0 | sPos < 1 Then sPos = 1
If DataType( sLen, 'NUM' ) = 0 | sLen < 1 Then sLen = Length( stem.k ) - sPos + 1
x = Substr( stem.k, sPos, sLen )
Do Until i > j
Do While Substr( stem.i, sPos, sLen ) << x; i = i + 1; End
Do While Substr( stem.j, sPos, sLen ) >> x; j = j - 1; End
If i <= j Then Do
xchg = stem.i
stem.i = stem.j
stem.j = xchg
i = i + 1
j = j - 1
End
End
y = QSort( left, j, sPos, sLen )
y = QSort( i,right, sPos, sLen )
End
Return right - left
/*** End QSortAtPos ***/
Beispiel 1
Call QSortAtPos ,, 20, 10
Ergebnis 1
Sortiert alle Stem-Variablen
stem. von
1 bis
stem.0
für eine Zeichenkette ab der Position
20 mit der Länge
10.
Beispiel 2
x = QSortAtPos( 1, stem.0, 20, 10 )
Ergebnis 2
Sortiert alle Stem-Variablen
stem. von
1 bis
stem.0
für eine Zeichenkette ab der Position
20 mit der Länge
10.