Ordenamiento – Burbujeo

Enunciado

Este método consiste en comparar elementos adyacentes y en caso de no estar en el orden deseado se los intercambia de posición. Con esto se logra desplazar a las últimas posiciones del vector a los elementos mayores ( en caso de ordenamiento ascendente ) o a los elementos menores ( en caso de ordenamiento descendente ). El proceso termina en, como máximo, n – 1 recorridas. el algoritmo permite detectar si en algún paso intermedio el vector está ordenado con lo cual se sale del ciclo antes de la cantidad máxima de recorridas posibles.

Video: Ordenamiento por Burbujeo

Código

Python

def Bubble( v ):
    fin = 0
    k = len( v )
    while fin==0:
        fin = 1
        k -= 1
        for i in range( 0, k ):
            if v[ i ] < v[ i+1 ]:
                fin = 0
                v[ i ], v[ i+1 ] = v[ i+1 ], v[ i ]
       
       
def main():
    lista = [ 12, 18, 3, 22, 15, 48, 12 ]
    
    Bubble( lista )
    
    print( lista )
    
    input( "Presionar/Press Enter to exit " )
main()

C++

#include <iostream>
#include <iomanip>
using namespace std ;
#include <conio.h>

void Bubble ( int n , float v[ ] )
{
   bool fin ; int k, i ; float aux ;

   fin = false ; k = n ;
   while ( !fin )
   {
      fin= true ;
      for ( i = 0 ; i < k-1 ; i++ )
      if ( v[ i ] < v[ i + 1 ] )
      {
         aux = v[ i ] ; 
	 v[ i ] = v[ i + 1 ] ; 
	 v[ i + 1 ] = aux ;  
	 fin = false ;
       }
       k = k - 1 ;
   }
}

int main()
{
   int  i ;
   float v1[ 10 ] ;

   cout << "Ingresar 5 numeros/" ;
   cout << "Enter 5 numbers: " << endl ;
   for ( i = 0 ; i < 5 ; i++ )
	cin >> v1[ i ] ;

   Bubble( 5 , v1 ) ;

   cout << "Vector ordenado/" ;
   cout << "Ordered vector" << endl ;
   for ( i = 0 ; i < 5 ; i++ )
	cout << setw(8) << v1[ i ] << endl ;
	
   cout << endl ;
   cout << "Presionar/Press Enter to exit " ;
   getch() ;
   return 0 ;
}

Pascal

Program ProblemaEj05 ;
uses CRT ;
const
    n= 5 ;
type
    rango= 0..20 ;
    vectorReal= array [rango] of real ;
var
    v1: vectorReal ;
    i: rango ;

Procedure Bubble( n : rango ; var v : vectorReal ) ;
var 
    fin : boolean ; 
    k, i : rango ; 
    aux : real ;
begin
    fin := false ; k := n ;
    while not fin do
    begin
	fin := true ;
	for i := 1 to k-1 do
	    if  v[ i ] < v[ i + 1 ] 
	    then
	    begin
		aux := v[ i ] ;
		v[ i ] := v[ i + 1 ] ;
		v[ i + 1 ] := aux ;
		fin := false
	    end ;
	    k := k-1
	end
end ;

begin
    ClrScr ;
    write( 'Ingresar 5 numeros/' ) ;
    writeln( 'Enter 5 numbers: ' ) ;
    for i:=1 to n do
    begin
         readln( v1[ i ] ) ;
    end;
    writeln ;

    Bubble( n , v1 ) ;
    
    write( 'Vector ordenado/' ) ;
    writeln( 'Ordered vector' ) ;
    for i:=1 to n do
        writeln( v1[ i ]:8:2 ) ;

    writeln ;
    writeln( 'Presionar/Press Enter to exit ' ) ;
    readln ;
end.

Diagramas