Para ordenar un vector se quieren poner los elementos mayores en el final de dicho vector, y los elementos menores al principio. Para ello, sólo contamos con la instrucción if.
Lo que haremos es comparar el primer elemento con todos los que lo siguen. Si alguno de los que lo siguen es menor, intercambiamos sus posiciones.
Comparamos el primer elemento (15) con el segundo (7). Como 15 es mayor, los intercambio. Ahora comparo el primero (7) con el tercero (12). Como no es mayor, no los intercambio. Comparo 7 con 9 y tampoco los intercambio. Finalmente, comparo el primero (7) con el quinto (3). Como el primero es mayor, los intercambio. Luego de comparar el primer elemento con todos los que le siguen, podemos asegurar que el primer elemento es el menor de todos.
Ahora repetimos el procedimiento comparando el segundo elemento con todos los que le siguen.
Comparo 15 con 12. Como es mayor, los intercambio. Luego comparo 12 con 9 y como es mayor, también los intercambio. Por último, comparo 9 con 7 y también los intercambio. Ahora puedo asegurar que el primer y el segundo elemento están ordenados.
En la siguiente vuelta, comparamos el tercer elemento con todos los que siguen:
Comparo el tercero (15) con el cuarto (12) y los intercambio. Luego comparo 12 con 9 y los intercambio. Ahora puedo asegurar que los tres primeros elementos del vector están ordenados.
Ahora comparo el cuarto elemento con todos los que siguen:
Comparo 15 con 12 y los intercambio. Puedo asegurar que el cuarto también está ordenado. Como todos los elementos menos el último están ordenados; el último elemento es el mayor de todos y tambien está ordenado, no tengo que continuar.
Vamos a ver ahora el programa que implementa este algoritmo:
#include
<iostream>
using
namespace std;
#define
TAM 5
void
main()
{
int
v[TAM];
int i,j, aux;
// Cargo el vector
for (i=0; i<TAM; i++)
v[i] = rand()%100;
for (i=0; i<TAM; i++)
cout
<< v[i] << " ";
cout << endl;
// Ordenamiento
for (i=0; i<TAM-1; i++) // i va desde el
primer elemento al penúltimo
for (j=i+1; j<TAM; j++) //j va desde el
siguiente (i+1) hasta el final
if (v[i]>v[j]) // Si el
primero es mayor...
{
aux = v[i];
// ....
los intercambio
v[i]
= v[j];
v[j]
= aux;
}
for (i=0;
i<TAM; i++)
cout << v[i] << " ";
cout << endl;
}
Si en lugar de ascendente, quiero hacer un ordenamiento descendente, sólo tengo que cambiar el signo > por < en la comparación.
Este método de ordenamiento se llama ordenamiento por burbujeo, ya que (con mucha imaginación), los elementos más "livianos" suben rápidamente como burbujas en el agua, mientras que los más pesados se van hundiendo lentamente.
No hay comentarios:
Publicar un comentario