Stretch Ragazzo Casual Mid Pantaloni Denim Straight Men's Jeans Strappato Fashion Hellblau Slim Vita Fit Destroyed Skinny Sw7XqXg

O
Stretch Ragazzo Casual Mid Pantaloni Denim Straight Men's Jeans Strappato Fashion Hellblau Slim Vita Fit Destroyed Skinny Sw7XqXg Stretch Ragazzo Casual Mid Pantaloni Denim Straight Men's Jeans Strappato Fashion Hellblau Slim Vita Fit Destroyed Skinny Sw7XqXg Stretch Ragazzo Casual Mid Pantaloni Denim Straight Men's Jeans Strappato Fashion Hellblau Slim Vita Fit Destroyed Skinny Sw7XqXg Stretch Ragazzo Casual Mid Pantaloni Denim Straight Men's Jeans Strappato Fashion Hellblau Slim Vita Fit Destroyed Skinny Sw7XqXg Stretch Ragazzo Casual Mid Pantaloni Denim Straight Men's Jeans Strappato Fashion Hellblau Slim Vita Fit Destroyed Skinny Sw7XqXg Stretch Ragazzo Casual Mid Pantaloni Denim Straight Men's Jeans Strappato Fashion Hellblau Slim Vita Fit Destroyed Skinny Sw7XqXg

Dopo aver parlato della complessità computazionale e della Ginocchio Sentao Stile Leggings Donna Strappati Vintage Pantaloni Scarni Jeans Skinny 2 ErrqHB oggi parleremo dell’ordinamento di un array.

Data una sequenza di elementi sotto forma di array, la si vuole ordinare in maniera crescente o decrescente in base ad una certa relazione d’ordine (presi due elementi a scelta, deve sempre essere possibile accertare quale venga prima e quale dopo).

Nel corso dell’articolo si farà riferimento ad array di tipo numerico ed, in particolare, di tipo intero e si prenderà in considerazione l’ordinamento di tipo crescente. Solitamente, per ottenere la variante con ordinamento decrescente, sono sufficienti delle piccole modifiche.

Sebbene sarà indicata la complessità computazionale nel caso medio di ciascun algoritmo, il suo valore non sarà analizzato perché le dimostrazioni matematiche necessarie sono complesse e vanno aldilà dello scopo di questo articolo.

Argomenti trattati:

PROPRIETÀ DEGLI ALGORITMI

Jeans Strappato Denim Skinny Mid Slim Straight Fit Destroyed Ragazzo Hellblau Fashion Stretch Men's Vita Pantaloni Casual Esistono delle proprietà che caratterizzano gli algoritmi di ordinamento e che possono essere utili per studiarli o per decidere quale algoritmo adoperare in un determinato caso.

STABILITÀ

Un algoritmo di ordinamento è stabile quando mantiene l’ordine originale degli oggetti con chiavi uguali. Se ad esempio si vuole ordinare una lista di nominativi per cognome e la lista è già stata ordinata per nome, utilizzando un algoritmo stabile l’ordinamento dei nomi verrà rispettato come in un classico elenco telefonico. Diversamente, le persone con lo stesso cognome sarebbero disposte “casualmente” rispetto al nome.

SUL POSTO (IN-PLACE)

Un algoritmo di ordinamento si dice sul posto se utilizza un numero costante di variabili oltre all’array da ordinare e non utilizza quindi un array di supporto.

ADATTIVITÀ

Un algoritmo di ordinamento è adattivo quando trae vantaggio dagli elementi già ordinati.

Alta Blu Elastico Con Slim Vita A Caviglia Pantaloni Jeans Uomo Alla Fit q6tSSpw

BUBBLE SORT

Il bubble sort è un semplice algoritmo di ordinamento non molto efficiente. Difatti, si utilizza a scopi didattici grazie alla sua semplicità e per introdurre gli sviluppatori agli algoritmi ed alla complessità computazionale.
L’algoritmo deve il suo nome al modo in cui gli elementi vengono ordinati: quelli più piccoli “risalgono” verso un’estremità della lista, mentre quelli più grandi “affondano” verso l’estremità opposta, come le bolle in un bicchiere di spumante.

  1. public static void bubbleSort(int[] arr) {
  2. int n = arr.length;
  3. boolean swapped;
  4. for(int i=0; i) {
  5. swapped = false;
  6. Jeans Slim Pantaloni Fashion Vita Straight Hellblau Denim Men's Strappato Skinny Casual Stretch Mid Fit Destroyed Ragazzo for(int j=1; j<(n-i); j++Fit Ragazzo Vita Jeans Men's Stretch Denim Hellblau Slim Destroyed Mid Pantaloni Straight Skinny Fashion Strappato Casual )Ragazzo Men's Strappato Stretch Casual Slim Straight Vita Hellblau Fashion Destroyed Denim Pantaloni Mid Jeans Fit Skinny
  7. if(arr[j-1] > arr[j]){
  8. int temp = arr[j-1];
  9. arr[j-1] = arr[j];
  10. arr[j] = temp;
  11. swapped = true;
  12. }
  13. if (!swapped)
  14. break;
  15. }
  16. }
public static void bubbleSort(int[] arr) {  
   int n = arr.length;
   boolean swapped;  
   for(int i=0; i arr[j]){  
            int temp = arr[j-1];  
            arr[j-1] = arr[j];  
            arr[j] = temp;  
            swapped = true;
         }
      if (!swapped)
         break;  
   }
}  

Ad ogni iterazione, si considerano, una ad una, tutte le possibili coppie di elementi adiacenti, scambiandoli se risultano nell’ordine errato. Dopo ogni iterazione, l’elemento massimo è in fondo alla parte di array considerata. Grazie all’utilizzo della variabile swapped, è possibile ottimizzare l’algoritmo fermandone l’esecuzione se il ciclo for più interno non ha effettuato alcuno scambio.

PROPRIETà

STABILE
IN-PLACE
ADATTIVO

 

COMPLESSITÀ COMPUTAZIONALE

TEMPO DI ESECUZIONE

Le operazioni di inizializzazione variabile, confronto ed incremento di un valore intero hanno un tempo di esecuzione pari ad O(1). Il tempo di esecuzione dell’algoritmo è dato dalla complessità del corpo dei cicli for annidati per il numero di volte in cui essi vengono eseguiti.

Caso peggiore O(N²)
Caso medio O(N²)
Caso migliore O(N)

 

  • Caso peggiore: l’array è ordinato in maniera inversa; la prima iterazione effettuerà n controlli, la successiva n-1 e così via, quindi si ha T(n)=n(n-1)/2  —> O(N²);
  • Caso migliore: l’array è già ordinato e verrà effettuata una sola iterazione della sequenza;

SPAZIO DI ESECUZIONE

Lo spazio totale utilizzato dall’algoritmo è pari ad O(n), mentre quello ausiliario è pari ad O(1) perché non vengono utilizzate strutture dati supplementari.

SELECTION SORT

Il selection sort ordinamento per selezione, opera dividendo la sequenza di input in due parti: la sottosequenza di elementi già ordinati (che occupa le prime posizioni dell’array) e la sottosequenza di elementi non ordinati (che occupa il resto dell’array).

Inizialmente, la sottosequenza ordinata è vuota, mentre quella non ordinata rappresenta l’intero input. L’algoritmo seleziona di volta in volta il numero minore nella sottosequenza non ordinata e lo sposta in quella ordinata.

A proposito di me

Giovanni Rizzotti

Grande appassionato di informatica sin da bambino, ha conseguito una laurea Triennale in Informatica e, successivamente, una laurea Magistrale in Engineering and Computer Science. Attualmente si occupa di sviluppo di applicazioni desktop, Android, Siti Web e Bot di Telegram.

Gli articoli più letti