Bubble Sort
- Algoritmo di ordinamento delle bolle
- Esempio di algoritmo di ordinamento a bolle
- Implementazione dell’algoritmo Bubble Sort
- Complessità dell’algoritmo di ordinamento delle bolle
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]
eA[1]
), confronta i loro valori e, se non sono nell’ordine corretto, scambiali. Fai lo stesso per la coppia successiva (A[1]
eA[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 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