Newsgroup: it.comp.appl.access
Titolo: Ordinamento vettoriale

Mi serve una funzione VBA per ordinare il piu' velocemente
possibile in senso crescente gli elementi di un vettore
pippo(i) di interi, non c'e' una funzione di libreria? non
vorrei scriverla con istruzioni VBA, sarebbe sicuramente
inefficiente
il barbi

 ha scritto nel messaggio
news:mcBMb.78847$VW.32...@news3.tin.it...

Perchè inefficiente.....???
Public Sub QuickSortFonts(varArray() As String, _
 Optional intLeft As Integer = dhcMissing, _
 Optional intRight As Integer = dhcMissing)
   'Sfrutta il metodo QuickSort per l'ordinamento
   'in questo caso si sfrutta anche la funzione
   'come ricorsiva
   Dim i As Integer
   Dim j As Integer
   Dim varTestVal As Variant
   Dim intMid As Integer
   If intLeft = dhcMissing Then intLeft = LBound(varArray)
   If intRight = dhcMissing Then intRight = UBound(varArray)
   If intLeft < intRight Then
      intMid = (intLeft + intRight) \ 2
      varTestVal = varArray(intMid)
      i = intLeft
      j = intRight
      Do
          Do While varArray(i) < varTestVal
              i = i + 1
          Loop
          Do While varArray(j) > varTestVal
              j = j - 1
          Loop
          If i <= j Then
              Call SwapElementsFont(varArray, i, j)
              i = i + 1
              j = j - 1
          End If
      Loop Until i > j
      If j <= intMid Then
          Call QuickSortFonts(varArray(), intLeft, j)
          Call QuickSortFonts(varArray(), i, intRight)
      Else
          Call QuickSortFonts(varArray(), i, intRight)
          Call QuickSortFonts(varArray(), intLeft, j)
      End If
   End If
End Sub
Ordina in maniera crescente le opzioni sono i Limiti destro e sinistro
del Vettore entro i quali effettuare l'ordinamento, se li ometti ordina
tutto il vettore.
Ciao.
@Alex.


volevo dire inefficiente rispetto a una funzione di
libreria, che naturalmente se ci fosse sarebbe piu'
veloce... Cioe', il sorting e' una funzione molto usata a
livello di codice di sistema (gestione dell'HD, indici ecc.)
e quindi mi pareva che potesse anche essere messa a
disposizione del povero utente... Naturalmente la tua
routine e' validissima, il metodo dicotomico e' senz'altro
il migliore e l'uso della funzione come ricursiva e'
raffinato, a livello di esame for advanced programmers!
il barbi

 il barbi
Non è mia per correttezza d'informazioni, ma non mi pare
sia nulla particolare...!
Ciao.
@Alex.


a proposito, su microsoft.public.access.formscoding mi hanno
dato una risposta veramente spiazzante:
"You have got the Jet engine - a pretty good sorter.  Write
the array to a
table, then query the table with the sort order you want."
che sia la soluzione piu' veloce?
 :-))
il barbi

 ha scritto nel messaggio
news:qFiNb.116985$_P.42...@news4.tin.it...

Si può provare, in ogni caso analizzando gli eventi non credo.
Devi scrivere in una Tabella che non hai, quindi da creare, non temporanea
altrimenti la QRY non la puoi fare, per scrivere nel Recordset della Tabella
devi ciclare in ogni caso tutto il Vettore, alchè fai la QRY temporanea
oppure
estrai un Recordset con SELECT.........ORDER BY
a questo punto che non è velocissima, quindi ottieni un Vettore(in realtà
un recordset, in ogni caso ottimo per l'uso)......!
Se hai tempo di provarlo è un dato molto interessante......!!!!
Se posso farò lo stesso con un vettore di almeno 10000 dati Random
ci aggiorniamo....!
@Alex.