Electronica
El ordenamiento por burbuja es bastante sencillo, consiste en evaluar pares de elementos contiguos del arreglo y si el primero es mayor que el siguiente los intercambia (los más chicosquedan abajo). Todo ésto sucede dentro de dos ciclos for que recorren el arreglo. El ciclo más interno realiza las comparaciones, y se asegura ya en la primera pasada completa que el elemento ás grande del arreglo suba a la posición más alta (ésto más adelante nos permitirá desarrollar un algorítmo mejorado del método burbuja).
El programa siguiente consta de 3 funciones:-------------------------------------------------
//La usamos para desplegar los elementos del arreglo.
void mostrarArreglo(const int[], int);
//Es el algoritmo de ordenamiento por burbuja
void ordenarArreglo(int[], int);
/*Esta función es llamada por la función anterior,
y se encarga de intercambiar los pares de elementos
cuando sea necesario. Notar que recibe referencias
ya que necesitamodificar los valores de sus argumentos.*/
void intercambiar(int&, int&);
Ejemplo:
-------------------------------------------------
//Ordena burbuja, ordenamiento
//de un arreglo metodo burbuja
#include <iostream>
using std::cout;
using std::cin;
using std::endl;
void mostrarArreglo(const int[], int); //prototipo de funcion que recibe un arreglo constante
voidordenarArreglo(int[], int); //prototipo que modifica y ordena elarreglo
void intercambiar(int&, int&); //prototipo, intercambialos valores de dos elementos
int main()
{
const int tamano = 15;
int arreglo[tamano] = {25,17,13,16,41,32,12,115,95,84,54,63,78,21,10};
cout << "Arreglo antes de ordenarse: " <<endl;
mostrarArreglo(arreglo,tamano);
cout <<"Arreglo despues de ordenarse: " <<endl;
ordenarArreglo(arreglo,tamano);
mostrarArreglo(arreglo,tamano);
cout << "Fin del programa :)" << endl;
return 0;
}//fin de main
void mostrarArreglo(const int arreglo[], int tamano)
{
for (int i = 0 ; i < tamano ; i++)
cout << "arreglo["<< i << "]=" << arreglo[i]<< endl;
}
voidordenarArreglo(int arreglo[], int tamano)
{
for (int i = 0; i<tamano-1 ; i++)
for (int j = 0; j<tamano-1 ; j++)
if(arreglo[j] < arreglo[j+1])
intercambiar(arreglo[j],arreglo[j+1]);
}
void intercambiar(int &a, int &b)
{
int tmp = b;
b = a;
a = tmp;
}
Descripción.
^
Este es el algoritmo más sencillo probablemente. Ideal para empezar. Consiste en ciclarrepetidamente a través de la lista, comparando elementos adyacentes de dos en dos. Si un elemento es mayor que el que está en la siguiente posición se intercambian. ¿Sencillo no?
2. Pseudocódigo en C.
^
Tabla de variables |
Nombre | Tipo | Uso |
lista | Cualquiera | Lista a ordenar |
TAM | Constante entera | Tamaño de la lista |
i | Entero | Contador |
j | Entero | Contador |
temp| El mismo que los elementos de la lista | Para realizar los intercambios |
1. for (i=1; i<TAM; i++)
2. for j=0 ; j<TAM - 1; j++)
3. if (lista[j] > lista[j+1])
4. temp = lista[j];
5. lista[j] = lista[j+1];
6. lista[j+1] = temp;
3. Un ejemplo
^
Vamos a ver un ejemplo. Esta es nuestra lista:4 - 3 - 5 - 2 - 1
Tenemos 5 elementos. Es decir, TAM toma el valor 5. Comenzamos comparando el primero con el segundo elemento. 4 es mayor que 3, así que intercambiamos. Ahora tenemos:
3 - 4 - 5 - 2 - 1
Ahora comparamos el segundo con el tercero: 4 es menor que 5, así que no hacemos nada. Continuamos con el tercero y el cuarto: 5 es mayor que 2. Intercambiamos y obtenemos:
3 - 4 - 2 - 5 - 1...
Regístrate para leer el documento completo.