Autor Thema: Sortieren  (Gelesen 1147 mal)

Offline marhaxus

  • Frischling
  • *
  • Beiträge: 28
  • Geschlecht: Männlich
  • In Iris we trust
Sortieren
« am: 02.05.02 - 15:04:02 »
Hat jemand zufällig ein LotusScript zur Hand, mit dem Arrays sortiert werden können?
« Letzte Änderung: 01.01.70 - 01:00:00 von 1034200800 »
CU marhaxus

Offline eknori

  • @Notes Preisträger
  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 11.728
  • Geschlecht: Männlich
Re: Sortieren
« Antwort #1 am: 02.05.02 - 15:13:21 »
yoo, rein zufällig

Sub Quicksort( array_sort )
     Dim start%, ende%, starthelp%, endehelp%, start_ret%, ende_ret%, maxlength%,stackpointer%, pivot%
     Dim v_value, v_compare
     
    ' Abbruch falls nur 1 Element
     If Ubound( array_sort ) < 1 Then Exit Sub
     num& = True
     
     For i% = 0 To Ubound(array_sort)
           On Error Goto NOT_NUMERIC
           tmp& = array_sort(i%)
     Next
     
     maxlength% = Ubound( array_sort )
     
    ' Stack initialisieren auf maximale Größe
     Dim array_start() As Integer, array_ende() As Integer
     Redim array_start( maxlength% ) As Integer
     Redim array_ende( maxlength% ) As Integer
     
    ' Hilfsarray
     Dim array_help() As Variant
     Redim array_help( maxlength% ) As Variant
     
    ' Legt Anfangswerte auf Stack
     array_start( 0 ) = Lbound( array_sort )
     array_ende( 0 ) = Ubound( array_sort )
     
    ' Schleife -> solange Stack belegt ist
     Do  While stackpointer% >= 0
           
         ' Holte Arraybereich von Stack
           start% = array_start( stackpointer% )
           ende% = array_ende( stackpointer% )
           stackpointer% = stackpointer% -1
           
         ' Eigentliche Sortierfunktion S T A R T      
           starthelp% = start%
           endehelp% = ende%
           
         ' Pivotelement
           pivot% = (start% + ende%) / 2
           v_compare = array_sort( pivot% )
           
    ' Sortieren nach > Pivotelement und < Pivotelement
               ' Vor Pivotelement
           Dim n%
           For n% = start% To pivot% -1
                 
                 v_value = array_sort( n% )
                 
                 If num& Then
                       v_compare = Cint(v_compare)
                       v_value = Cint(v_value)
                 End If
                 
                 If ( v_compare > v_value ) Then
                       array_help( starthelp%) = v_value
                       starthelp% = starthelp% + 1      
                 Else
                       array_help( endehelp% ) = v_value
                       endehelp% = endehelp% -1
                 End If    
           Next
           
         ' Nach Pivotelement
           For n% = ende% To pivot%+1 Step -1
                 
                 v_value = array_sort( n% )    
                 
                 If num& Then
                       v_compare = Cint(v_compare)
                       v_value = Cint(v_value)
                 End If
                 
                 If ( v_compare > v_value ) Then
                       array_help( starthelp%) = v_value
                       starthelp% = starthelp% + 1      
                 Else
                       array_help( endehelp% ) = v_value
                       endehelp% = endehelp% -1
                 End If    
           Next
           
         ' Pivotelement wird zurück in Liste gelegt
           array_help( starthelp% ) = v_compare
           
         ' Werte aus Hilfsarray werden zurückgeschrieben
           For n% = start% To ende%
                 array_sort( n% ) = array_help( n% )
           Next
           
         ' Sortierbereiche neu festlegen
           start_ret% = endehelp% + 1
           ende_ret% = ende%
           start% = start%
           ende% = starthelp% - 1
           
         ' Legt 1 Arraybereich auf Stack
           If start% < ende% Then
                 stackpointer% = stackpointer% + 1
                 array_start( stackpointer% ) = start%
                 array_ende( stackpointer% ) = ende%
           End If
           
          ' Legt 2 Arraybereich auf Stack
           If start_ret% < ende_ret% Then
                 stackpointer% = stackpointer% + 1
                 array_start( stackpointer% ) = start_ret%
                 array_ende( stackpointer% ) = ende_ret%
           End If
           
     Loop
     Exit Sub
NOT_NUMERIC:
     num& = False
     Resume Next
End Sub
Egal wie tief man die Messlatte für den menschlichen Verstand auch ansetzt: jeden Tag kommt jemand und marschiert erhobenen Hauptes drunter her!

Offline marhaxus

  • Frischling
  • *
  • Beiträge: 28
  • Geschlecht: Männlich
  • In Iris we trust
Re: Sortieren
« Antwort #2 am: 02.05.02 - 17:14:13 »
Bedankt!!  ;D
« Letzte Änderung: 01.01.70 - 01:00:00 von 1034200800 »
CU marhaxus

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz