Algoritmos sobre arrays

13
Capitulo III: Capitulo III: Algoritmos sobre Algoritmos sobre arrays arrays

Transcript of Algoritmos sobre arrays

Page 1: Algoritmos sobre arrays

Capitulo III: Capitulo III: Algoritmos sobre arraysAlgoritmos sobre arrays

Page 2: Algoritmos sobre arrays

Algoritmos de búsquedaAlgoritmos de búsqueda

Los dos algoritmos más importantes son: la Los dos algoritmos más importantes son: la

búsqueda secuencial y la búsqueda binaria.búsqueda secuencial y la búsqueda binaria.

La búsqueda secuencial puede realizarse en La búsqueda secuencial puede realizarse en

cualquier tipo de arrays (no necesita que estén cualquier tipo de arrays (no necesita que estén

ordenados), y es muy sencilla, pero es un método ordenados), y es muy sencilla, pero es un método

poco eficiente. La búsqueda binaria sólo puede poco eficiente. La búsqueda binaria sólo puede

utilizarse sobre arrays ordenados, y es algo más utilizarse sobre arrays ordenados, y es algo más

complicada, pero es altamente eficiente.complicada, pero es altamente eficiente.

Page 3: Algoritmos sobre arrays

Búsqueda secuencialBúsqueda secuencial

Consiste en ir comparando cada elemento Consiste en ir comparando cada elemento del array con el elemento a buscar, del array con el elemento a buscar, comenzando por el principio. Finalizara la comenzando por el principio. Finalizara la búsqueda cuando se localice el elemento o búsqueda cuando se localice el elemento o cuando se llegue al final del array. Si se cuando se llegue al final del array. Si se encuentra el elemento, se devolverá como encuentra el elemento, se devolverá como resultado su posición; si no, se devolverá un resultado su posición; si no, se devolverá un código de error que indique que el elemento no se código de error que indique que el elemento no se encuentra en el array. encuentra en el array.

Page 4: Algoritmos sobre arrays

Búsqueda binariaBúsqueda binaria

El algoritmo consiste en examinar primero el El algoritmo consiste en examinar primero el elemento que ocupa el centro de la lista, si es el elemento que ocupa el centro de la lista, si es el que se busca ya se ha logrado la solución y si no, que se busca ya se ha logrado la solución y si no, se determina si el elemento buscado está en la se determina si el elemento buscado está en la primera mitad (porque es inferior al elemento primera mitad (porque es inferior al elemento central), en cuyo caso se descarta la segunda mitad, o si central), en cuyo caso se descarta la segunda mitad, o si está en la segunda mitad (porque es superior), está en la segunda mitad (porque es superior), descartando la primera mitad. Se repite el proceso con la descartando la primera mitad. Se repite el proceso con la sublista correspondiente hasta que se encuentre el sublista correspondiente hasta que se encuentre el elemento o bien hasta que se determine que no está elemento o bien hasta que se determine que no está porque se ha llegado a una sublista de 0 elementos.porque se ha llegado a una sublista de 0 elementos.

Page 5: Algoritmos sobre arrays

Algoritmos de inserciónAlgoritmos de inserción

Estos métodos consisten en añadir un Estos métodos consisten en añadir un

nuevo elemento al array. Siempre debe nuevo elemento al array. Siempre debe

verificarse que hay espacio disponible para verificarse que hay espacio disponible para

el nuevo elemento. Si el array no esta el nuevo elemento. Si el array no esta

ordenado, habrá que especificar la posición ordenado, habrá que especificar la posición

donde se quiere insertar el nuevo elemento. donde se quiere insertar el nuevo elemento.

Si está ordenado, el propio algoritmo determinará Si está ordenado, el propio algoritmo determinará

la posición que le corresponde al nuevo elemento.la posición que le corresponde al nuevo elemento.

Page 6: Algoritmos sobre arrays

Inserción en un array no ordenadoInserción en un array no ordenado

Es necesario indicar la posición que debe Es necesario indicar la posición que debe

ocupar el nuevo elemento. Para insertar un ocupar el nuevo elemento. Para insertar un

elemento en una determinada posición de elemento en una determinada posición de

un array, deberá abrirse un hueco en dicha un array, deberá abrirse un hueco en dicha

posición, moviendo los elementos posición, moviendo los elementos

posteriores un lugar, empezando por el posteriores un lugar, empezando por el

ultimo.ultimo.

Page 7: Algoritmos sobre arrays

Inserción de un elemento en un Inserción de un elemento en un array ordenadoarray ordenado

No hay que indicar ninguna posición, sino que ocupará la No hay que indicar ninguna posición, sino que ocupará la posición que le corresponda según su valor. Pueden posición que le corresponda según su valor. Pueden contemplarse dos situaciones.contemplarse dos situaciones.Los elementos no pueden encontrarse repetidos en la lista. Si Los elementos no pueden encontrarse repetidos en la lista. Si el elemento que se desea insertar ya existe se lanza un el elemento que se desea insertar ya existe se lanza un mensaje indicando que no se puede insertar el elemento, mensaje indicando que no se puede insertar el elemento, caso contrario se averigua la posición que la corresponde y caso contrario se averigua la posición que la corresponde y se inserta en está.se inserta en está.Los elementos pueden repetirse. En este caso, nos da igual Los elementos pueden repetirse. En este caso, nos da igual que el elemento a insertar se encuentre ya en el arrayque el elemento a insertar se encuentre ya en el array

Page 8: Algoritmos sobre arrays

Algoritmos de ordenaciónAlgoritmos de ordenación

Existen los métodos directos y los Existen los métodos directos y los Avanzados.Avanzados.Entre los directos hay el burbuja, inserción Entre los directos hay el burbuja, inserción directa y selección directa.directa y selección directa.Entre los avanzados están el QuickSort y el Entre los avanzados están el QuickSort y el HeapSort.HeapSort.

Page 9: Algoritmos sobre arrays

BurbujaBurbuja

La característica principal de este método La característica principal de este método

es el intercambio de pares de elementos es el intercambio de pares de elementos

adyacentes. Consiste básicamente en hacer adyacentes. Consiste básicamente en hacer

varias pasadas sobre el array comparando varias pasadas sobre el array comparando

en cada una de ellas todos los elementos en cada una de ellas todos los elementos

adyacentes de forma que si no están adyacentes de forma que si no están

ordenados se intercambian.ordenados se intercambian.

Page 10: Algoritmos sobre arrays

Método de inserción directaMétodo de inserción directa

Este método consiste en insertar cada Este método consiste en insertar cada

elemento, comenzando por el segundo y elemento, comenzando por el segundo y

hasta el final, en el lugar que le corresponde hasta el final, en el lugar que le corresponde

en la secuencia ordenada que se va en la secuencia ordenada que se va

formando a su izquierda.formando a su izquierda.

Page 11: Algoritmos sobre arrays

Método de selección directa Método de selección directa

Este método selecciona de la lista completa el Este método selecciona de la lista completa el elemento con menor valor y se intercambia con el elemento con menor valor y se intercambia con el primero, con lo que el primer elemento queda primero, con lo que el primer elemento queda definitivamente ordenado. A continuación, se definitivamente ordenado. A continuación, se busca el elemento de menor valor de la sublista busca el elemento de menor valor de la sublista comprendida entre el segundo y el último, y se comprendida entre el segundo y el último, y se intercambia con el segundo elemento, y así intercambia con el segundo elemento, y así sucesivamente hasta que sólo quede un elemento, sucesivamente hasta que sólo quede un elemento, que quedará definitivamente ordenado en el último que quedará definitivamente ordenado en el último lugar.lugar.

Page 12: Algoritmos sobre arrays

Método de ordenación rápida Método de ordenación rápida (QuickSort)(QuickSort)

Consiste en particionar el array de forma que los Consiste en particionar el array de forma que los valores de la parte izquierda sean todos menores valores de la parte izquierda sean todos menores o iguales que un determinado elemento del array o iguales que un determinado elemento del array llamado pivote, y los de la parte derecha, mayores llamado pivote, y los de la parte derecha, mayores o iguales que el pivote. Una vez hecho esto, se o iguales que el pivote. Una vez hecho esto, se particionan del mismo modo las partes izquierda y particionan del mismo modo las partes izquierda y derecha, haciendo lo mismo con las partes derecha, haciendo lo mismo con las partes resultantes , y así sucesivamente hasta que todas resultantes , y así sucesivamente hasta que todas las partes consten de un elemento, momento en el las partes consten de un elemento, momento en el cual se habrá conseguido ordenar el array. cual se habrá conseguido ordenar el array.

Page 13: Algoritmos sobre arrays

Método del montículo (HeapSort)Método del montículo (HeapSort)

Este método es una variante del método de ordenación Este método es una variante del método de ordenación por selección, donde la búsqueda del elemento mínimo de por selección, donde la búsqueda del elemento mínimo de un array se realiza mediante técnicas basadas en la un array se realiza mediante técnicas basadas en la construcción de un montículo o heap.construcción de un montículo o heap.Un montículo es un árbol binario que Un montículo es un árbol binario que cumple ciertas condiciones. Consideremos cumple ciertas condiciones. Consideremos dos tipos de montículos:dos tipos de montículos:Montículo ascendente (también llamado Montículo ascendente (también llamado main heap): en ellos se cumple que cada main heap): en ellos se cumple que cada nodo es menor o igual que sus hijos.nodo es menor o igual que sus hijos.Montículo descendente (o max heap): se cumple Montículo descendente (o max heap): se cumple que cada nodo es mayor o igual que sus hijos.que cada nodo es mayor o igual que sus hijos.