come posso fare cio avendo un array (integer) ?
come posso fare cio avendo un array (integer) ?
Con un qualsiasi algoritmo di sort.
:master: devo crearmi una funzione o ne esiste gia una?![]()
Non esistono funzioni di ordinamento "native" per VB6.
era quello che volevo sapere, grazie!![]()
ora cerco di farmi una routine.
sto pensando a dei cicli, e' questa la strada che devo percorrere?
se a qualcuno puo' interessare ho risolto in questo modo:
non l'ho commentato molto ma si dovrebbe capirecodice:Private Sub Sort_Desc(arr() As String) Dim i As Integer, c As Integer, t As Integer Dim DoAdd As Boolean Dim newArr() As String ReDim newArr(0) t = UBound(arr) + 1 c = 0 Do DoEvents DoAdd = True 'controllo il numero selezionato con tutti i numeri nell'array For i = 0 To UBound(arr) 'se il numero selezionato e' minore di un solo numero nell'array 'lo "scarto" e passo al successivo (per poi riprenderlo dopo) If Int(arr(c)) < Int(arr(i)) Then DoAdd = False Exit For End If Next i If DoAdd = True Then 'se il numero non e' stato scartato (quindi e' il maggiore)... ReDim Preserve newArr(UBound(newArr) + 1) 'ridimensiono nuovo array newArr(UBound(newArr)) = arr(c) 'aggiungo il numero nel nuovo array 'cambio il numero selezionato in 0, 'in modo che non sia piu maggiore a nessun numero nell'array originale arr(c) = 0 'sottraggo 1 a t t = t - 1 End If c = c + 1 'se c e' oltre i limiti dell'array azzero l'indice di selezione If c = UBound(arr) + 1 Then c = 0 'se t e' = a 0, vuoldire che sono stati controllati tutti i numeri e posso uscire dal ciclo Loop Until t = 0 arr = newArr End Sub![]()
ciao e grazie Oregon![]()
Ciao !Originariamente inviato da 814(k m49!(
se a qualcuno puo' interessare ho risolto in questo modo:
non l'ho commentato molto ma si dovrebbe capirecodice:Private Sub Sort_Desc(arr() As String) Dim i As Integer, c As Integer, t As Integer Dim DoAdd As Boolean Dim newArr() As String ReDim newArr(0) t = UBound(arr) + 1 c = 0 Do DoEvents DoAdd = True 'controllo il numero selezionato con tutti i numeri nell'array For i = 0 To UBound(arr) 'se il numero selezionato e' minore di un solo numero nell'array 'lo "scarto" e passo al successivo (per poi riprenderlo dopo) If Int(arr(c)) < Int(arr(i)) Then DoAdd = False Exit For End If Next i If DoAdd = True Then 'se il numero non e' stato scartato (quindi e' il maggiore)... ReDim Preserve newArr(UBound(newArr) + 1) 'ridimensiono nuovo array newArr(UBound(newArr)) = arr(c) 'aggiungo il numero nel nuovo array 'cambio il numero selezionato in 0, 'in modo che non sia piu maggiore a nessun numero nell'array originale arr(c) = 0 'sottraggo 1 a t t = t - 1 End If c = c + 1 'se c e' oltre i limiti dell'array azzero l'indice di selezione If c = UBound(arr) + 1 Then c = 0 'se t e' = a 0, vuoldire che sono stati controllati tutti i numeri e posso uscire dal ciclo Loop Until t = 0 arr = newArr End Sub![]()
ciao e grazie Oregon![]()
Visto che sull'argomento "Sort" sono stati scritti centinaia di libri, mi permetto di suggerirti una piccola ricerca in rete, anziche' "reinventarti" tutto l'algoritmo....
Il tuo e' "abbastanza" efficace (a parte il fatto che tralascia il primo elemento del vettore, assume arbitrariamente che inizi con l'elemento 0, ecc...), ma e' spaventosamente inefficiente !
Prova a fare un sort di 1000 elementi e te ne accorgerai !
Il piu' semplice algoritmo utilizzato BubbleSort, e' 10 volte piu' corto come codice e almeno 200 volte piu' veloce...
Dai un'occhiata qui: http://it.wikipedia.org/wiki/Bubble_sort ... c'e' anche il codice Basic !
Ciao !
IceCube_HT (VB6 fan Club)