• Regolamento Macrocategoria DEV
    Prima di aprire un topic nella Macrocategoria DEV, è bene leggerne il suo regolamento. Sei un'azienda o un hosting/provider? Qui sono anche contenute informazioni per collaborare con Sciax2 ed ottenere l'accredito nella nostra community!

Guida Bubble sort

ptm

Utente Master
Autore del topic
13 Maggio 2008
2.716
62
Miglior risposta
0
Algoritmi di ordinamento -> Bubble sort

Il Bubble sort è un algoritmo di ordinamento che opera in-place (o in loco, cioè l'ordinamento viene operato direttamente sull'array in input). Presenta una complessità variabile a seconda della lista presentata in input; nel caso migliore, ossia nel caso in cui la lista presentata in input sia già ordinata, presenta una complessità lineare pari a O(n), ma nel caso medio e peggiore presenta una complessità pari a O(n[SUP]2[/SUP]) e ciò lo rende abbastanza inefficiente in caso di n elevato.

L'algoritmo procede confrontando ciascun elemento con l'elemento che lo segue; se l'elemento è maggiore del suo successivo allora questi vengono scambiati di posizione. L'effetto è che gli elementi più grandi "levitano" verso l'alto (come bolle, da cui prende il nome l'algoritmo). Per avere un ordinamento questa procedura di confronti viene ripetuta n volte (dove n è la dimensione della lista).

Codice

Codice:
Perfavore, Entra oppure Registrati per vedere i codici!



Ottimizzazioni

Si possono effettuare alcune piccole ottimizzazioni su questo algoritmo e ora ne vediamo in breve due possibili che possiamo andare ad utilizzare per migliorare l'efficienza dell'algoritmo usato in partenza.

1. Ad una data iterazione i è possibile fermare i confronti alla posizione n-i. Infatti i primi i elementi maggiori saranno già in posizione ordinati nella parte finale della lista (vedi figura)

Bubble-sort-example-300px.gif

In rosso gli elementi oggetti di confronto, in nero gli elementi già in ordine all'iterazione i​

Possiamo quindi andare a modificare il codice di partenza per tenere conto di questa osservazione; tutto ciò si traduce nella modifica della condizione del for nidificato ( j < n-i-1 )
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!

2. Se ad una data iterazione i non viene effettuato nessuno scambio, allora la lista è già ordinata e si può interrompere l'algoritmo. Realizziamo questo comportamento mediante una variabile booleana che tiene traccia del fatto che vengano effettuati scambi o meno.
Il codice finale diventa quindi

Codice:
Perfavore, Entra oppure Registrati per vedere i codici!
 
Ultima modifica:
  • Like
Reactions: 1 person