Homepage  Il progetto dsy.it è l'unofficial support site dei corsi di laurea del Dipartimento di Scienze dell'Informazione e del Dipartimento di Informatica e Comunicazione della Statale di Milano. E' un servizio degli studenti per gli studenti, curato in modo no-profit da un gruppo di essi. I nostri servizi comprendono aree di discussione per ogni Corso di Laurea, un'area download per lo scambio file, una raccolta di link e un motore di ricerca, il supporto agli studenti lavoratori, il forum hosting per Professori e studenti, i blog, e molto altro...
In questa sezione è indicizzato in textonly il contenuto del nostro forum


.dsy:it. .dsy:it. Archive > Didattica > Corsi A - F > Algoritmi e strutture dati
 
[Bubblesort vs. Quicksort] Bellissimo!!
Clicca QUI per vedere il messaggio nel forum
CowBoy
Che la sfida abbia inizio:

http://www.youtube.com/watch?v=vxENKlcs2Tw

xSharKMaNx
http://www.geek.com/articles/geek-c...fects-20100819/

Buona visione ;)

CowBoy
Ho scritto l'algoritmo quicksort in VBA secondo le indicazioni trovate nella dispensa di Goldwurm, poiché svolgendo i calcoli a mano non riuscivo ad ordinare la sequenza in modo corretto.

L'array viene rappresentato dalla colonna A(A[1], A[2]... A[n]), contenente in celle consecutive una sequenza di numeri da ordinare. La pila viene rappresentata dalle colonne C e D.

Provo ad eseguire l'algoritmo e nella maggior parte delle volte la sequenza non è ordinata... sapete dirmi dove sto sbagliando?


HO RISOLTO!!! IL CODICE ADESSO FUNZIONA

code:
Function partition(ByVal p As Integer, ByVal q As Integer) As Integer Dim i As Integer Dim j As Integer i = p + 1 j = q While (i <= j) While (Cells(j, 1) > Cells(p, 1)) j = j - 1 Wend While ((Cells(i, 1) <= Cells(p, 1)) And i <= j) i = i + 1 Wend If i < j Then scambia i, j i = i + 1 j = j - 1 End If Wend scambia p, j partition = j End Function Function scambia(ByVal p As Integer, ByVal q As Integer) Dim t As Integer t = Cells(p, 1) Cells(p, 1) = Cells(q, 1) Cells(q, 1) = t End Function Function random(ByVal a As Integer, ByVal b As Integer) As Integer random = a + Rnd * (b - a) End Function Function quicksort(ByVal a As Integer, ByVal b As Integer) Dim p As Integer Dim q As Integer Dim k As Integer Dim l As Integer Dim x As Integer ' pila Dim s As Integer ' stop Dim i As Integer Dim j As Integer p = a q = b x = 0 s = 0 Do While p < q k = random(p, q) scambia p, k l = partition(p, q) If l - p < q - l Then i = l + 1 j = q q = l - 1 Else i = p j = l - 1 p = l + 1 End If x = x + 1 Cells(x, 3) = i Cells(x, 4) = j Wend If x <> 0 Then p = Cells(x, 3) q = Cells(x, 4) x = x - 1 Else s = 1 End If Loop While (s = 0) End Function Sub exec() quicksort 1, Application.WorksheetFunction.Count(Range("A:A")) ' quicksort da 1 a n End Sub


Potete provarlo sul foglio di lavoro nel post successivo...

CowBoy
Worksheet:

Powered by: vbHome (lite) v4.1 and vBulletin v2.3.1 - Copyright ©2000 - 2002, Jelsoft Enterprises Limited
Mantained by dsy crew (email) | Collabora con noi | Segnalaci un bug | Archive | Regolamento |Licenze | Thanks | Syndacate