Startseite
Downloads
Lexikon
Sonstiges
Links
Kontakt
Gästebuch
Statistics
Disclaimer
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
Parameter
Beschreibung
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
fromX
1
toX
stem.0
pos
1
len
Jeweilige Länge der aktuellen vergleichbaren Stem-Variablen stem.k verkleinert um die Startposition (pos - 1)
Rückgabewerte
keine
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.
Your privacy: This web site has no cookies, no advertising and does not provide access data to anyone for any reason.
Copyright © Janosch R. Kowalczyk 1999, 2010. All rights reserved.
Most recent revision on 25 Feb 2010 (56) - 13:22:53.
Jakoxx Logo