In questo caso però il citerio di ordinamento non sarà in base al dato ma a uno dei dati contenuti nell'oggetto. Un metodo per rendere la proceudra riutilizzabile in diversi contesti, senza fare quindi modifiche al codice, è quello di aggiungere alla classe una proprietà che determini il valore in base a cui ordinare.
La nostra classe di esempio ClCliente sarà:
In questo modo qualsiasi siano gli elementi della nostra
classe (clienti, articoli...) potremmo semplicente richiamare la procedura di ordinamento.
QuickSort nome della collection
Quinidi la procedure di ordinamento sarà:
Sub QuickSort(
Coll As Collection,
Optional primo As Long = 0,
Optional ultimo As Long = 0)
Dim vp
As Variant
Dim i
As Long, j
As Long, p
As Long
Dim tObj
As Object
If (
ultimo = 0)
Then
primo = 1
ultimo =
Coll.Count
End If
i =
primo
j =
ultimo
' valore del pivot
vp =
Coll((
primo +
ultimo) \ 2).OrdinaPer
Do While i <= j
Do While (
Coll(i).OrdinaPer < vp And i <
ultimo)
i = i + 1
Loop
Do While (vp <
Coll(j).OrdinaPer And j >
primo)
j = j - 1
Loop
If (i < j)
Then
' scambia i valori
Set tObj =
Coll(i)
Coll.Add Item:=Coll(j), After:=i
Coll.Remove i
Coll.Add tObj, Before:=j
Coll.Remove j + 1
End If
If (i <= j)
Then
' passa al successivo
i = i + 1
j = j - 1
End If
Loop
'chiamate ricorsive
If (
primo < j)
Then QuickSort Coll,
primo, j
If (i <
ultimo)
Then QuickSort Coll, i,
ultimo
End Sub
Gli esempi contenuti nel sito sono per uso personale, non é consentito l'uso professionale, commerciale o la riproduzione senza autorizzazione.