bubble sort
1/25/2021, 5:56:57 PM 1/25/2021, 8:33:34 PM

Bubble Sort, algoritmo d'ordinamento in c++

Il Bubble Sort è un algoritmo d'ordinamento iterativo, fra i più semplici da implementare, con una complessità di O(n^2)

Introduzione

L'algoritmo BubbleSort (ordinamento "a bolle") si basa sull'idea di far "emergere" man mano gli elementi più piccoli verso l'inizio dell'insieme da

ordinare facendo "sprofondare" al tempo stesso gli elementi più grandi verso la fine dell'insieme

Perché ordinare?

Si potrebbe eseguire la ricerca, o qualsiasi operazione senza ordinare, con un determinato criterio, una serie di dati.

Ordinare i dati agevola la ricerca se eseguita con un criterio, se a esempio, abbiamo un array x = 4,7,8,43,54,62; sarà molto semplice utilizzare algoritmi che sfruttano in cosiddetto Divide et impera che ridurrà ad una manciata di passaggi la ricerca di un determinato valore ad esempio il "54", si potrà avere già a un primo passaggio l'array 54,62 e subito dopo trovare immediatamente il valore cercato, invece di iterare l'intero array fin dalla posizione 0 alla posizone n, dove n nel nostro caso è 4

Strategia

La strategia adottata è quella di scorrere più volte la sequenza da ordinare, verificando ad ogni passo l'ordinamento reciproco degli elementi contigui, ai e a i + 1, ed eventualmente scambiare le coppie non ordinate.

esempio:

  • A = 3,5,2,4,1 => 3,5,2,4,1 => 3,2,5,4,1 => 3,2,4,5,1 ==> 3,2,4,1,5
  • A = 3,2,4,1,5 => 2,3,4,1,5 => 2,3,4,1,5 => 2,3,1,4,5
  • A = 2,3,1,4,5 => 2,3,1,4,5 => 2,1,3,4,5
  • A = 2,1,3,4,5 => 1,2,3,4,5

Alla fine di ognuna delle quattro scansioni della sequenza, l'elemento più grande del sottoinsieme ancora da ordinare, finisce in fondo alla sequenza, nella sua posizione definitivamente corretta, mentre la sotto sequenza ancora non ordinata si riduce per ogni passaggio

Ora vediamo una rappresentazione in codice c++

#include <iostream>

using namespace std;

int main(){

  const short size = 20;
  int elementi[size] = { 0 };

  //popoliamo l'array elementi con valori casuali compresi tra 3 e 99 ( estremi inclusi )
  for(int i = 0; i< size; i++)
    elementi[i] = rand() % 100 + 3;

  cout << "Pre ordinamento\n";
  for( auto e : elementi)
      cout << e << " ";
  cout << endl;

  // inizio bubblesort
  for(int i = 0; i< size -1; i++)
      for( int j = 0; j< size - 1 - i; j++)
          if( elementi[j] > elementi[ j + 1])
            swap( elementi[j], elementi[ j + 1]);
  // fine bubblesort 

  cout << "Post ordinamento\n";
  for( auto e : elementi)
      cout << e << " ";
  cout << endl;


  return 0;
}