Newsgroup: it.comp.lang.visual-basic
Titolo: [?] Sorting array

Pensavo fosse assai più facile ...
ma sto impazzendo ... impazzendo ... impazzendo ...
tra poco mi butto sotto dalla finestra.
Chi mi può dare una mano?
Sono arrivato a trovare l'indice più basso del mio array ... ma quando poi
lo vado a confrontare per trovare il suo indice successivo ... beh i conti
non mi tornano mai.
Ho provato a leggere un paio di capitoli di un libro che però è su pascal
la teoria c'è ... ma messa in pratica non mi torna.
Grazie Andrea
-- 
Posted from 
mail1.finsiel.it
 [156.54.253.3] 
via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 ha scritto nel messaggio
news:000701c08609$684edb80$1ab1369c@mandrea...


Sono arrivato a trovare l'indice più basso del mio array
orrore
è un algoritmo sconsigliatissimo (InsertSort?)
usa il QuickSort, da implementare è facilissimo

 Ho provato a leggere un paio di capitoli di un libro che però è su pascal
la teoria c'è ... ma messa in pratica non mi torna.
Che domanda posta in modo bislacco! Sembra che tu cerchi solo conforto e non
quello che e` lecito aspettarsi da un ng come iclvb... ;-)
Visita il sito comune:
 
http://www.murialdo.it/it_lang_vb
e troverai molto piu` che una pacca sulla spalla.
--
Ciao :-)
Maurizio
--------
?SPQR(C)
 X
--------

Ho trovato :)
Ci sono riuscito ... perň mi chiedo se quello che ho fatto č realmente il
quicksort o che altro ;)
Io inserisco in un array ... faccio poi il secondo array delle stesse
dimensioni del primo
quindi inizio il ciclo ... prendo il primo elemento del ciclo pieno, facendo
dentro un ciclo per sincerarmi che l'elemento che prendo non sia vuoto ... e
lo assegno ad una variabile temporanea
quindi ciclo l'array pieno e lo metto a confronto con la variabile di poco
fa e vedo ... varibile č maggiore uguale a elemento dell'array? Si allora
prendo l'elemento piů piccolo ... no proseguo.
Finisco tutto l'array ... quindi riempo l'array vuoto con la variabile
temporanea e cancello la posizione dell'array pieno che corrisponde alla
variabile temporanea.
Spero sia chiaro. Che mi dici č buono come sistema?
Quello che dici tu come č ?
Ciao Andrea

Spero sia chiaro. Che mi dici è buono come sistema?
brrrrrrrrr
no, NON è buono...
Const ARR_SIZE = 32767
'Implementazione del QuickSort in-loco per VB
'codice buttato giu' alla meno peggio in dieci minuti
Sub QuickSort( _
    	ByRef inpArray(ARR_SIZE) as Integer, _
    	ByVal left as Single, _
    	ByVal right as Single _
)
Dim fromLeft as Integer, fromRight as Integer
'sotto-array di lunghezza negativa: nient'altro da fare, usciamo dalla
'procedura
If left > right Then Exit Sub
'inizializziamo i due indici di ricerca
fromLeft = left + 1
fromRight = right
Do
'questo blocco sposta nella meta' sinistra tutti gli elementi minori del
'primo, e nella metà destra tutti quelli maggiori
'percorri da sinistra finche' non trovi un elemento nel posto sbagliato,
'ossia un elemento piu' grande del primo (detto pivot) ma nella meta'
'sinistra
Do Until inpArray(fromLeft) > inpArray(left)
    	fromLeft = fromLeft + 1
Loop
'idem come sopra. Qui si scende da destra cercando un elemento minore
'del pivot
Do Until inpArray(fromRight) < inpArray(left)
    	fromRight = fromRight - 1
Loop
'abbiamo la posizione di due elementi sbagliati: uno maggiore ma a 
sinistra e uno minore ma a destra. Li scambiamo.
SwapInt(inpArray(fromLeft), inpArray(fromRight))
'quando i due indici di ricerca si incrociano, possiamo anche
'interrompere perche' abbiamo percorso tutto l'array
Loop Until fromLeft < fromRight
'scambiamo l'ultimo elemento trovato minore del pivot con il pivot, che
'verra cosi' a trovarsi in mezzo, con a sinistra tutti gli elementi
'minori e a destra quelli maggiori
SwapInt(inpArray(fromLeft), inpArray(left))
'applichiamo il quick sort alle due meta' dell'array
QuickSort(inpArray, left, fromLeft - 1)
QuickSort(inpArray, fromLeft + 1, right)
End Sub
'scambia due interi
'notare il triplo xor per evitare l'uso di una terza variabile
Sub SwapInt(ByRef first as Integer, ByRef second as Integer)
    	first = first xor second
    	second = first xor second
    	first = first xor second
End Sub

usa il QuickSort, da implementare è facilissimo
A me piace tanto il bubblesort, che e' il piu' facile da fare e se non
ricordo male ha complessita' O(n).
Saluti.
-- 
      Gianni "bugbarbeq" Rondinini, 25, RA, 242, 152
  VBR - Vero Birro Romagnolo®, diffidate dalle imitazioni!
 Opel/ECC Calibrezio EVO-IV --- Kawasaki "Gas Gas" ZZ-R 1100
 ICQ# 36893168 - IRCNet: bugbarbeq, @ on #linux-it & #NetBSD

ricordo male ha complessita' O(n).
il bubblesort è molto bello, soprattutto perchè molto intuitivo, ma 
orribilmente lento. Lo Shear Sort è forse il migliore (ha una velocità 
assurda, ho visto una demo e mi ha lasciata basita, brucia il QuickSort 
in partenza), ma credo sia pesantuccio in termini di calcolo (ignoro 
l'algoritmo :/)