Shellsort




Sub SortArray(strArray() As String)
Dim lngIncr As Long
Dim lngIelem1 As Long
Dim lngIelem2 As Long
Dim lngI As Long
Dim strHold As String
lngIncr = UBound(strArray) \ 2
Do
If lngIncr = 0 Then Exit Sub
For lngI = lngIncr + 1 To UBound(strArray)
lngIelem1 = lngI - lngIncr
SortArray1:
If lngIelem1 > 0 Then
lngIelem2 = lngIelem1 + lngIncr
If strArray(lngIelem1) > strArray(lngIelem2) Then
' switch elements

strHold = strArray(lngIelem1)
strArray(lngIelem1) = strArray(lngIelem2)
strArray(lngIelem2) = strHold
lngIelem1 = lngIelem1 - lngIncr
GoTo SortArray1
End If
End If
Next
lngIncr = lngIncr \ 2
Loop
End Sub
Il Bubble Sort ha il grosso vantaggio di poche righe di codice.
Ma c'e' un altro sort che uso da anni per un
'quick-and-dirty' sort che si chiama Shell Sort.

Non arriva alle prestazioni di un Quick Sort - ma quasi.
Ha il vantaggio di necessitare poche righe di codice.
In piu', non degrada come il Qick Sort (fatto senza precauzioni)
quando gli elementi sono gia' (o quasi) ordinati.
Scusate infinitivamente il GOTO - ma qualche volta serve
veramente.










( shellsort.html )- by Paolo Puglisi - Modifica del 17/12/2023