Bubble Sort

Harshit Jindal 12 ottobre 2023
  1. Algoritmo di ordinamento delle bolle
  2. Esempio di algoritmo di ordinamento a bolle
  3. Implementazione dell’algoritmo Bubble Sort
  4. Complessità dell’algoritmo di ordinamento delle bolle
Bubble Sort

Bubble sort è un semplice algoritmo di ordinamento. Funziona confrontando ripetutamente gli elementi adiacenti e scambiandoli se sono nell’ordine sbagliato. I confronti ripetuti fanno comparire l’elemento più piccolo / più grande verso la fine dell’array, e quindi questo algoritmo è chiamato bubble sort. Sebbene inefficiente, rappresenta ancora la base per gli algoritmi di ordinamento.

Algoritmo di ordinamento delle bolle

Supponiamo di avere un array non ordinato A[] contenente n elementi.

  • Inizia dalla coppia dei primi due elementi (A[0] e A[1]), confronta i loro valori e, se non sono nell’ordine corretto, scambiali. Fai lo stesso per la coppia successiva (A[1] e A[2]) e muoviti in modo simile per il resto della matrice. L’elemento più piccolo / più grande si trova nell’ultima posizione dopo questo passaggio.
  • Ripeti i passaggi precedenti (n-2) volte per le restanti iterazioni. Riduci la dimensione dell’array di uno ogni volta poiché l’ultimo elemento è già ordinato. L’elemento più piccolo / più grande in questa iterazione si sposta nella posizione più a destra.

Il passaggio 1 dell’algoritmo sopra è anche chiamato passaggio. Per ordinare un array di dimensione n, sono necessari n-1 passaggi.

Esempio di algoritmo di ordinamento a bolle

Supponiamo di avere l’array: (5,3,4,2,1). Lo ordineremo utilizzando l’algoritmo di ordinamento delle bolle.

  • Primo passaggio:
(5 3 4 2 1) (3 5 4 2 1) (3 < 5 scambiati)
(3 5 4 2 1) (3 4 5 2 1) (4 < 5 scambiati)
(3 4 5 2 1) (3 4 2 5 1) (2 < 5 scambiati)
(3 4 2 5 1) (3 4 2 1 5) (1 < 5 scambiati)
  • Secondo passaggio:
(3 4 2 1 5) (3 4 2 1 5)
(3 4 2 1 5) (3 2 4 1 5) (2 < 4 scambiati)
(3 2 4 1 5) (3 2 1 4 5) (1 < 4 scambiati)
  • Terzo passaggio:
(3 2 1 4 5) (2 3 1 4 5) (2 < 3 scambiati)
(2 3 1 4 5) (2 1 3 4 5) (1 < 3 scambiato)
  • Quarto passaggio:
(2 1 3 4 5) (1 2 3 4 5) (1 < 2 scambiato)

Otteniamo l’array ordinato dopo il quarto passaggio - (1 2 3 4 5)

Implementazione dell’algoritmo Bubble Sort

#include <iostream>

using namespace std;
void bubble_sort(int arr[], int n) {
  for (int i = 0; i < n - 1; i++) {
    for (int j = 0; j < n - i - 1; j++) {
      if (arr[j] > arr[j + 1]) {
        swap(arr[j], arr[j + 1]);
      }
    }
  }
}
int main() {
  int n = 5;
  int arr[5] = {5, 3, 4, 2, 1};
  cout << "Input array: ";
  for (int i = 0; i < n; i++) {
    cout << arr[i] << " ";
  }
  cout << "\n";
  bubble_sort(arr, n);  // Sort elements in ascending order
  cout << "Output array: ";
  for (int i = 0; i < n; i++) {
    cout << arr[i] << " ";
  }
  cout << "\n";
}

Complessità dell’algoritmo di ordinamento delle bolle

Complessità temporale

  • Case nella media

In media, i confronti n-i vengono effettuati nel passaggio ith del bubble sort. Quindi, se ci sono n passaggi, la complessità temporale media può essere data da

(n-1) + (n-2) + (n-3) ..... + 1 = n*(n-1)/2

Quindi la complessità temporale è dell’ordine di O(n2).

  • Peggiore caso

Il caso peggiore si verifica quando l’array viene ordinato in modo inverso e deve essere eseguito il numero massimo di confronti e scambi.

La complessità temporale del caso peggiore è O(n2).

  • Caso migliore

Il caso migliore si verifica quando la matrice è già ordinata e quindi sono necessari solo N confronti.

La complessità temporale nel migliore dei casi è O(n).

Complessità spaziale

La complessità dello spazio per questo algoritmo è O(n) perché non è richiesta alcuna memoria aggiuntiva oltre a una variabile temporanea.

Harshit Jindal avatar Harshit Jindal avatar

Harshit Jindal has done his Bachelors in Computer Science Engineering(2021) from DTU. He has always been a problem solver and now turned that into his profession. Currently working at M365 Cloud Security team(Torus) on Cloud Security Services and Datacenter Buildout Automation.

LinkedIn

Articolo correlato - Sort Algorithm