Newsgroup: it.comp.lang.visual-basic
Titolo: Come si fa il sort?

Mi ricordo che esisteva SWAP?
Ma su VB cosa c'è?

Ciao, Massimo
la settimana scorsa ho postato una soluzione per il sort mediente il metodo
Exchanging,
definito anche, mi dicono, Bubble Sort. Tieni presente che il sort di
stringhe lo puoi
ottenere comodamente utilizzando controlli tipo combobox o listbox che hanno
la
proprietà sorted. Per gli array numerici, ti riposto quanto il codice di cui
ti parlavo
sopra.
Ciao,
un altro metodo di ordinamento è quello definito EXCHANGING.
Si basa sul seguente algoritmo.
1) Si parte con un contatore degli scambi azzerato (=0).
2) Tutti gli elementi dell'array vengono confrontati a coppie.
3) Se sono consecutivi (leggi: il primo è più piccolo del secondo)
     si confronta il secondo con il terzo e così fino all'ultima coppia.
4) Se, invece, non sono in ordine, si procede ad uno scambio.
    A scambio avvenuto si incrementa il contatore degli scambi.
5) Si completa il ciclo di confronti, operando tutti gli scambi
    necessari.
6) Se alla fine del ciclo si è operato almeno uno scambio si
    ricomincia dal punto 1. Altrimenti, si esce. (Ovviamente a
    punto l'array è ordinato.
La codifica, in VB potrebbe somigliare a questo :
Dim t(9) As Integer
Dim nI As Integer
Dim nBuffer As Integer
Dim nScambi As Integer
List1.Clear
List2.Clear
' Questo solo per ricavare una tabella di numeri casuali da  ordinare
Randomize ' Per ottenere una sequenza sempre diversa
List1.AddItem Int(100 * Rnd(100)) + 1
List1.AddItem Int(100 * Rnd(100)) + 1
List1.AddItem Int(100 * Rnd(100)) + 1
List1.AddItem Int(100 * Rnd(100)) + 1
List1.AddItem Int(100 * Rnd(100)) + 1
List1.AddItem Int(100 * Rnd(100)) + 1
List1.AddItem Int(100 * Rnd(100)) + 1
List1.AddItem Int(100 * Rnd(100)) + 1
List1.AddItem Int(100 * Rnd(100)) + 1
' Caricamento della tabella
For nI = 0 To List1.ListCount - 1
    t(nI + 1) = Val(List1.List(nI))
Next nI
' Inizio Ciclo
Do
    ' Azzero gli scambi
    nScambi = 0
    ' Passo a confrontare tutti gli
    ' elementi della tabella a coppie
    For nI = 1 To UBound(t) - 1
        ' Confronto l'ennesino con il successivo
        If t(nI) > t(nI + 1) Then
            ' Se non sono consecutivi
            ' opero uno scambio di posto
            ' e incremento il contatore
            ' degli scambi
            nScambi = nScambi + 1
            nBuffer = t(nI)
            t(nI) = t(nI + 1)
            t(nI + 1) = nBuffer
        End If
    Next nI
    ' Alla fine della serie di confronti
    ' se non ho operato alcuno scambio
    ' la tabella è ordinata
    If nScambi = 0 Then Exit Do
' altrimenti ricomincio
Loop
' Output del risultato
For nI = 1 To UBound(t)
    List2.AddItem t(nI)
Next nI
End Sub
Ciao, Vito
P.S.: Se vuoi scaricare un'applicazione di esempio che utilizza questo
algoritmo, lo trovi
su 
http://digilander.iol.it/VBItalia/INDICE.html
 nella sezione OCX in primo
piano.
Scarica lo zip che contiene l'esempio completo.
-- 
Posted from 
smtp2.libero.it
 [193.70.192.52] 
via Mailgate.ORG Server - 
http://www.Mailgate.ORG

Avevo pensato anch'io ad una soluzione simile (io lo facevo con due cicli
FOR...NEXT che giravano in senso opposto) ma non trovavo il comando SWAP del
vecchio Basic e pensavo che si chiamasse diversamente. Credo che opterň per
un ListBox, forse meglio un ListView (devo fare una marea di confronti per
CODICE, NOMINATIVO, INDIRIZZO alla ricerca dei nominativi duplicati) e
ricreare un SOTTOCODICE progressivo e quindi riportare il nuovo indice
univoco su diversi file (Vedi post precedent: OT: Il perchč delle mie
domande; R: OPPPS: Perchč non funziona?).
Spero di venirne a capo, non ne posso piů di fare mattina davanti al PC.
Ah, la soluzione del DB non va bene perchč devo fornire i dati in formato
ASCII su file separati e strutturati su gerarchie di directory predefinite.

 wrote in message
4urV5.438$hk4....@news.infostrada.it...


 ha scritto nel messaggio
news:5X296.68360$eB2.5...@news.infostrada.it...


 wrote in message
6cza6.101034$eB2.7...@news.infostrada.it...
