Quicksort: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
m clean up, Nota ripetuta |
fix typo: articolo sbagliato |
||
(3 versioni intermedie di 3 utenti non mostrate) | |||
Riga 5:
| didascalia = Quicksort in esecuzione su una lista di numeri. La linea blu è il valore del [[Pivot (matematica)|pivot]].
| struttura dati = Variabile
| tempo = <math>
| tempo medio = <math>\Theta(n\log_2 n)</math> confronti
| tempo migliore = <math>\
| spazio = Dipende dalle implementazioni
| ottimale = Spesso
Riga 13:
'''Quicksort''' è un [[algoritmo di ordinamento]] [[Algoritmo ricorsivo|ricorsivo]] [[Algoritmo in loco|in place]] non [[Algoritmo di ordinamento#Stabilit.C3.A0 di un algoritmo|stabile]]. E come l'algoritmo di ordinamento [[Merge sort|Mergesort]] basa il suo funzionamento sul paradigma del "''Divide et Impera''<ref>{{Cita web|lingua=it|url=https://www.freecodecamp.org/italian/news/gli-algoritmi-divide-et-impera/|titolo=Gli algoritmi Divide et Impera|sito=freeCodeCamp.org|data=21 luglio 2022|accesso=29 gennaio 2025}}</ref>"; ovvero sulla scomposizione del problema in più sottoproblemi di taglia minore<ref name="geeksforgeeks.org">{{Cita web|lingua=en|url=https://www.geeksforgeeks.org/quick-sort-algorithm/|titolo=Quick Sort|sito=GeeksforGeeks|data=7 gennaio 2014|accesso=29 gennaio 2025}}</ref>.
In generale
# '''Scelta del pivot:'''
Riga 23:
#* Alla fine di questa fase, il pivot sarà nella sua posizione corretta nella lista.
# '''Ricorsione sui sotto-array:'''
#* Applicazione del Quicksort alla parte sinistra (elementi minori o uguali al pivot) e alla
#* Continua fino a che i sotto-array contengono un solo elemento o sono vuoti (caso base).
Riga 29:
== Storia ==
L'algoritmo quicksort fu ideato nel 1959 da [[Tony Hoare]] durante un viaggio nell'URSS, durante una sua visita alla [[Moscow State University]]. In quel periodo, Hoare lavorava a un progetto di [[traduzione automatica]] per il [[National Physical Laboratory, UK|National Physical Laboratory]]. Durante il processo di traduzione si rese necessario ordinare le parole russe prima di consultare il dizionario Russo-Inglese che era registrato su un [[nastro magnetico]] e ordinato alfabeticamente.<ref>{{Cita pubblicazione|cognome=Shustek|nome=L.|titolo=Interview: An interview with C.A.R. Hoare|doi=10.1145/1467247.1467261|rivista=[[Communications of the ACM|Comm. ACM]]|volume=52|numero=3|pp=
== Algoritmo di base ==
Riga 138:
Per lo studio nel caso medio si valuta il numero medio di confronti tra elementi del vettore di ingresso eseguiti dall'algoritmo, determinando di conseguenza l'ordine di grandezza del tempo medio di calcolo necessario per eseguire la procedura.
La complessità dell'algoritmo in questo caso è <math>O (n \log_2 (n))</math>, precisamente <math display="inline">1.39\ n \log_2(n)</math>.
=== Caso migliore ===
Il caso migliore si verifica quando l'algoritmo di partizionamento determina due sottoproblemi perfettamente bilanciati, entrambi di dimensione ''n/2''; in questo caso il tempo di esecuzione è <math display="inline">O(n \log_2(n)
== Tipi di partizionamento ==
|