proposicion2 - Programación Aplicaciones T.Web

Anuncio
ORDENAMIENTO DE ARRAYS
El ordenamiento de la Información dentro de un Array es una utilidad común que se le
suele dar a las Estructuras de Array. Existen muchos tipos de Ordenamiento que ya
están implementados para su utilización.
Bubble Sort (u ordenamiento por burbuja)
Imaginemos que estamos en un parque con nuestra familia y queremos hacer
una foto en la que salgan todos. Decidimos que podemos ordenarlos según
sus edades de tal modo que tengamos al más joven a la izquierda y al más
mayor a la derecha. Sin embargo, como no les hemos dicho nada, se han
colocado de forma aleatoria:
Para aplicar un ordenamiento de tipo burbuja a este conjunto de elementos,
tenemos que prestar atención a las dos primeras personas de la izquierda. Le
preguntamos a cada uno por su edad y, si la que está a la izquierda es mayor
que la de su derecha, intercambiamos sus posiciones. En el caso contrario, no
hacemos nada ya que se encontrarían ordenados de forma relativa entre ellos.
En nuestro ejemplo, la persona de la izquierda es mayor que la de su derecha
por lo que tenemos que realizar el primer intercambio:
Ahora fijamos nuestra atención en la segunda y tercera posición para repetir el
proceso anterior: preguntamos por sus edades e intercambiamos posición si
fuera necesario. En nuestro ejemplo, no tenemos que realizar ahora ningún
intercambio, por lo que avanzaríamos para comparar la tercera y cuarta
posición entre ellas. De nuevo, están ya ordenados de forma relativa puesto
que la persona de la derecha, es mayor que la de su izquierda.
Avanzamos sin alterar nada hasta comparar la cuarta persona con la quinta.
Ahora si nos volvemos a encontrar con que la persona de la izquierda es mayor
que la derecha, por lo que es necesario un nuevo intercambio:
Hemos completado una vuelta sobre nuestro conjunto y de momento estamos
aún lejos de tenerlo ordenado. Sin embargo, si que hemos conseguido algo
importante: el elemento de la derecha está ya ubicado en su posición final; es
decir, que como si de una burbuja se tratase, el elemento más grande (en este
caso la persona más mayor) ha ido bullendo hasta su posición final.
El siguiente paso, sería volver a repetir el proceso ignorando la persona (el
elemento) que está a la derecha del conjunto (puesto que ya está en su
posición final).
Comparamos ahora la dos primeras posiciones y observamos que están ya
ordenadas, por lo que pasamos directamente a comparar la segunda con la
tercera posición. De nuevo tenemos los elementos ordenados de forma relativa
entre ellos por lo que pasariamos evaluar la tercera y cuarta posición.
Llegados a ese punto, observamos que la persona de la izquierda es mayor que
la de su derecha, por lo que intercambiamos posiciones obteniendo:
Hemos completado la segunda vuelta; comenzamos de nuevo e ignoramos
ahora los dos últimos elementos. Finalmente, tras todas las iteraciones
posibles, obtenemos:
Una vez que hemos comprendido cómo funciona, es hora de implementarlo en
código.
La idea tras este algoritmo es que, a cada iteración por el conjunto, un
elemento es llevado hasta su posición final y tiene que ser por lo tanto
ignorado en las siguientes. Esto se traduce en que, a cada paso, se debe
compara un elemento menos que en el anterior. Si N es el número de items en
la lista, entonces en la primera iteración necesitamos comparar N – 1; en la
segunda, N – 2, y así sucesivamente. Este tipo de códigos basado en bucles
dependientes se resuelven muy fácilmente
var size = myArr.length;
for( var pass = 1; pass < size; pass++ ){//Bucle Exterior
for( var left = 0; left < (size - pass); left++){//Bucle Interno
var right = left + 1;
if( myArr[left] > myArr[right] ){
swap(myArr, left, right);
}
}
}
Proposición 2:
Crear una función llamada arraySortOder(ARRAY), que recibe un Array como
parámetro. La función devuelve el Array ordenado mediante el Algoritmo de la
Burbuja.
La función solo ordena Arrays que contengan números por lo tanto lo primero que
haremos será recorrer el Array y comprobar los tipos de Datos de los Elementos del
Array y en caso de localizar uno que no sea un Número nos lo advertirá "EXISTEN
ELEMENTOS QUE NO SON NUMÉRICOS" y no realizará el ordenamiento.
Para la prueba del perfecto funcionamiento de la función se realizará una aplicación
que tenga la siguiente estructura:
Estructura del Programa:
var array = new Array();
array[0] = ?
array[1] = ?
array[2] = ?
.... // Los elementos que consideréis oportunos
if (comprobar_array(array) == true){
arraySortOrder(array);
}
La función comprobar_array(array):



Recorre el array que se le pasa como parámetro.
Si termina el recorrido y todos los elementos son números, devuelve un Verdadero.
Si encuentra algún elemento que no sea un Número devuelve un Falso.
Descargar