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.