Algoritmi · Ordinamento

Algoritmi di ordinamento

Non esiste un ordinamento migliore in assoluto. Distribuzione delle chiavi, memoria disponibile, stabilità e forma dell’input determinano la scelta. Ogni scheda apre un simulatore che rende visibili confronti, spostamenti e strutture ausiliarie.

Tabella comparativa

AlgoritmoMiglioreMedioPeggioreMemoria ausiliariaStabileIn place
Insertion sort Θ(n)Θ(n²)Θ(n²)Θ(1)
Merge sort Θ(n log n)Θ(n log n)Θ(n log n)Θ(n) No
Quicksort Θ(n log n)Θ(n log n)Θ(n²)Θ(log n)¹ No
Heapsort Θ(n log n)Θ(n log n)Θ(n log n)Θ(1) No
Counting sort Θ(n + k)Θ(n + k)Θ(n + k)Θ(n + k) No
Radix sort (LSD) Θ(d(n + b))Θ(d(n + b))Θ(d(n + b))Θ(n + b) No
Bucket sort Θ(n + k)Θ(n + k)²Θ(n²)Θ(n + k) Dipende³ No

1 Stack medio di quicksort; nel caso peggiore può diventare Θ(n). “In place” qui ammette lo stack ricorsivo.

2 Con distribuzione circa uniforme nei k secchi e ordinamento locale appropriato.

3 Bucket sort è stabile soltanto se distribuzione, ordinamento interno e concatenazione preservano l’ordine delle chiavi uguali.

Parametri: n elementi; k ampiezza dell’intervallo o numero di secchi; d cifre; b base numerica.

Due famiglie, due limiti diversi

Ordinamenti per confronto

Insertion, merge, quick e heap sort decidono l’ordine confrontando coppie di chiavi. Nel modello generale richiedono Ω(n log n) confronti nel caso peggiore.

Ordinamenti non comparativi

Counting, radix e bucket sort sfruttano la struttura delle chiavi. Possono essere lineari in n, ma il costo dipende anche da intervallo, cifre o distribuzione.

Apri un simulatore

Come scegliere in pratica

Input piccolo o quasi ordinatoInsertion sort
Garanzia e stabilitàMerge sort
Array in memoria, ottimo caso medioQuicksort
Memoria costante e garanziaHeapsort
Interi in un intervallo piccoloCounting sort
Interi o stringhe a lunghezza limitataRadix sort
Valori distribuiti quasi uniformementeBucket sort
Nelle librerie reali si usano spesso algoritmi ibridi: insertion sort per sottoproblemi piccoli, introsort per limitare il caso peggiore di quicksort, o Timsort per sfruttare sequenze già ordinate.

Le proprietà che la sola complessità non racconta

Stabile
Elementi con la stessa chiave mantengono il loro ordine relativo. È essenziale negli ordinamenti successivi per più campi.
In place
Usa una quantità costante o molto piccola di memoria oltre all’array; le convenzioni sullo stack ricorsivo vanno esplicitate.
Adattivo
Diventa più veloce quando l’input è già parzialmente ordinato. Insertion sort ne è l’esempio classico.
Online
Può mantenere l’ordine mentre arrivano nuovi elementi. Insertion sort si presta naturalmente.