miércoles, 20 de agosto de 2008

Programa 5. Ordenar un array

Después de un año de haber tenido olvidado este blog me he decidido a poner un programilla. Se trata de ordenar un array de valores enteros. El algoritmo que voy a utilizar es el llamado "método de la burbuja". Supongo que se llama "método de la burbuja" porque, al igual que una burbuja sube desde el fondo del agua hasta la superficie, así también los valores más altos suben hacia las posiciones más altas del array.

Para hacer el recorrido del vector utilizaremos una sentencia for. Es la más apropiada, ya que el recorrido tiene que ser completo (o casi completo) y no va a depender de ninguna condición que tenga que ver con los valores que pueda alojar el array, o sea, con los datos de entrada. Lo de "casi completo" lo digo porque el recorrido lo vamos a hacer de abajo hacia arriba y,luego,las comparaciones serán con los valores de las posiciones que estén más a la izquierda, por lo que el elemento array[0] no lo incluiremos en el bucle más externo (ya que no tiene elementos que estén por debajo) y comenzaremos por el segundo elemento, es decir, por array[1].

Luego, dentro de la sentencia for, cada elemento será comparado con los que estén más a su izquierda. Se comenzará con el más próximo y, si el contenido de éste es mayor que el elemento considerado, lo haremos escalar una posición hacia la derecha (o más hacia arriba, lo mismo da).Para esto habremos salvado el valor del elemento array[i] en una variable auxiliar. Así proseguiremos con todos los demás elementos del array que estén más a la izquierda que el que estemos considerando mientras se sigan cumpliendo estas dos condiciones:

1. que el siguiente (en orden decreciente) elemento del array tenga un contenido mayor que el contenido de la poscición que nos va apuntando el bucle más externo.

2. que concluya el recorrido del array.

En el momento en que una de las dos sentencias no se cumpla habrá que salir del bucle interno: el que hace el recorrido desde el elemento apuntado por el bucle externo hacia las posiciones que están a la izquierda. Esta circunstacia nos inclina por llevar a cabo este bucle interno con una sentencia while.



/*Este programa ordena un array de 10 elementos por el método de la burbuja*/

#include
#define SALTO_DE_LINEA "\n"

int array[10];
void ordenar_array[10];
void escribir_array[10];

int main(int argc,char*argv[])
{

array={2,33,87,12,64,87,8,91,55,7};
ordena_array(array);
esribir_array(array);
return 0;

}

void ordenar_vector(int a[10])
{
int i,j, auxiliar;
for (i=1;1<10;i++) j="i-1;" auxiliar="a[i];">
{
a[j+1]=v[j];
j--;
}
v[j+1]=auxiliar;
}
}

void escribir_array(int a[10])
{
int i;
for (i=0;i<10;i++)>