Documentos de Académico
Documentos de Profesional
Documentos de Cultura
CAPITULO 7
Métodos y Ordenación De Búsqueda En Vectores
CONTENIDO:
7.1 Introducción
7.2 Algoritmos de Ordenación
7.2.1 Ordenamiento Burbuja
7.2.2 Ordenamiento por Selección Directa
7.2.3 Ordenamiento por Inserción Directa
7.3 Métodos de Búsqueda
7.3.1 Búsqueda Secuencial
7.3.2 Búsqueda Binaria
7.1 INTRODUCCIÓN
Los algoritmos de ordenamiento en vectores, como su nombre lo dice, permiten ordenar información de una
manera especial basándonos en un criterio de ordenamiento. En programación, el ordenamiento de datos cumple
un rol muy importante, ya sea como un fin en sí o como parte de otros procedimientos más complejos. Se han
desarrollado muchas técnicas en este ámbito, cada una con características específicas, y con ventajas y desventajas
sobre las demás.
Ordenar es el proceso de ubicar elementos de una lista o colección en algún orden. Por ejemplo, un vector cuyos
elementos son palabras se podría ordenarse alfabéticamente. Un vector cuyos elementos son las cantidades de
habitantes de ciudades podría ordenarse por población, por área o por código postal.
Se han desarrollado y analizado muchísimos algoritmos de ordenamiento. Esto sugiere que el ordenamiento es
una importante área de estudio en programación. Ordenar un gran número de ítems puede requerir una cantidad
considerable de recursos informáticos. Al igual que la búsqueda, la eficiencia de un algoritmo de ordenamiento
está relacionada con el número de ítems que se están procesando. Para las pequeñas colecciones, un método de
ordenamiento complejo puede resultar más problemático que beneficioso. La sobrecarga puede ser demasiado
alta. Por otra parte, para colecciones más grandes, queremos aprovechar tantas mejoras como sean posibles.
Antes de considerar algoritmos de ordenación específicos, debemos pensar en las operaciones que se pueden
utilizar para analizar un proceso de ordenamiento. Primero, será necesario comparar dos valores para ver cuál es
más pequeño (o más grande). Para ordenar una colección de elementos, será necesario contar con una manera
sistemática de comparar los valores para ver si no están en orden. El número total de comparaciones será la forma
más común de medir un procedimiento de ordenamiento. En segundo lugar, cuando los valores no están en la
posición correcta con respecto a los otros, puede ser necesario intercambiarlos. Este intercambio es una operación
costosa y el número total de intercambios también será importante para evaluar la eficiencia global del algoritmo.
1
INSTITUTO TECNICO COMERCIAL INCOS EL – ALTO
CARRERA: SISTEMAS INFORMATICOS
ASIGNATURA: PROGRAMACION I
HAY INTERCAMBIO
NO HAY INTERCAMBIO
HAY INTERCAMBIO
HAY INTERCAMBIO
HAY INTERCAMBIO
HAY INTERCAMBIO
HAY INTERCAMBIO
HAY INTERCAMBIO
ELEMENTO 93 EN EL LUGAR
CORRECTO, LUEGO DEL
PRIMER RECORRIDO O
PASADA EN EL VECTOR
Al comienzo del segundo recorrido o segunda pasada, el valor más grande ya está en su lugar. Quedan n−1 ítems
por ordenar, lo que significa que habrá n−2 parejas. Puesto que cada recorrido o pasada ubica al siguiente valor
2
INSTITUTO TECNICO COMERCIAL INCOS EL – ALTO
CARRERA: SISTEMAS INFORMATICOS
ASIGNATURA: PROGRAMACION I
mayor en su lugar, el número total de pasadas necesarias será n−1. Después de completar la pasada n−1, el ítem
más pequeño debe estar en la posición correcta sin requerir procesamiento adicional.
El ordenamiento por selección mejora el ordenamiento burbuja haciendo un sólo intercambio por cada recorrido
o pasada a través del vector. Para hacer esto, un ordenamiento por selección busca el valor mayor a medida que
hace un recorrido o una pasada y, después de completar el recorrido o pasada, lo pone en la ubicación correcta.
Al igual que con un ordenamiento burbuja, después del primer recorrido o pasada, el elemento mayor está en la
ubicación correcta. Después del segundo recorrido o pasada, el siguiente mayor está en su ubicación. Este proceso
continúa y requiere n−1 recorridos o pasadas para ordenar los n elementos, ya que el elemento final debe estar en
su lugar después de la (n−1)-ésima pasada.
La siguiente figura muestra todo el proceso de ordenamiento. En cada paso, el ítem o elemento mayor restante se
selecciona y luego se pone en su ubicación correcta. El primer recorrido o pasada ubica el elemento 93, el segundo
recorrido o pasada ubica el elemento 77, el tercer recorrido o pasada ubica el 55, y así sucesivamente.
Se debe notar que el ordenamiento por selección hace el mismo número de comparaciones que el ordenamiento burbuja.
Sin embargo, debido a la reducción en el número de intercambios, el ordenamiento por selección normalmente se ejecuta
más rápidamente en pruebas de referencia. De hecho, para los elementos del vector mostrado, el ordenamiento burbuja hace
20 intercambios, mientras que el ordenamiento por selección hace sólo 8.
El ordenamiento por inserción, aunque sigue siendo de n-1 recorridos, funciona de una manera ligeramente
diferente. Siempre mantiene un subvector con los elementos ordenados en las posiciones inferiores del mismo
vector. Cada elemento nuevo se “inserta” de vuelta en el subvector ordenado. La siguiente figura muestra el
proceso de ordenamiento por inserción. Los elementos sombreados representan el subvector ordenado a medida
que el algoritmo lleva a cabo cada recorrido o pasada.
Se inicia asumiendo que un subvector con un elemento (posición [0]) ya está ordenado. En cada recorrido o
pasada, uno para cada elemento, desde 1 hasta n−1, el elemento actual se comparara contra los del subvector ya
ordenado. A medida que revisamos en el subvector ya ordenado, desplazamos a la derecha los elementos que sean
mayores. Cuando llegamos a un elemento menor o al final del subvector, se puede insertar el elemento actual.
4
INSTITUTO TECNICO COMERCIAL INCOS EL – ALTO
CARRERA: SISTEMAS INFORMATICOS
ASIGNATURA: PROGRAMACION I
La figura de abajo muestra los detalles de la quinta pasada o recorrido. En este punto del algoritmo, se tiene un
subvector ordenado de cinco elementos que consta de los números 17, 26, 54, 77 y 93. Queremos insertar el 31
de vuelta en los elementos ya ordenados. La primera comparación con 93 hace que 93 se desplace hacia la derecha.
El 77 y el 54 también se desplazan. Cuando se encuentra el elemento 26, el proceso de desplazamiento se detiene
y el 31 se ubica en la posición disponible. Ahora tenemos un subvector ordenado de seis elementos.
La siguiente figura muestra cómo funciona esta búsqueda. Comenzando en el primer elemento de la lista,
simplemente recorremos el vector de un elemento a otro, siguiendo el orden secuencial subyacente hasta que
encontremos lo que buscamos o nos quedemos sin elementos. Si nos quedamos sin elementos, hemos descubierto
que el elemento que estábamos buscando no estaba presente.
5
INSTITUTO TECNICO COMERCIAL INCOS EL – ALTO
CARRERA: SISTEMAS INFORMATICOS
ASIGNATURA: PROGRAMACION I
Podemos entonces repetir el proceso con la mitad superior. Comenzar en el elemento central y compararlo con el
valor que estamos buscando. Una vez más, o lo encontramos o dividimos la lista del vector por la mitad,
eliminando por tanto otra gran parte de nuestro espacio de búsqueda posible. La siguiente figura muestra cómo
este algoritmo puede encontrar rápidamente el valor 54.
LA MITAD INFERIOR
LA MITAD SUPERIOR
Se debe observar que este algoritmo es un gran ejemplo de una estrategia de “Divide y Vencerás”. Dividir y conquistar
significa que dividimos el problema en partes más pequeñas, resolvemos dichas partes más pequeñas de alguna manera y
luego reensamblamos todo el problema para obtener el resultado. Cuando realizamos una búsqueda binaria en un vector,
primero verificamos el elemento central. Si el elemento que estamos buscando es menor que el elemento central, podemos
simplemente realizar una búsqueda binaria en la mitad izquierda de la lista original. Del mismo modo, si el elemento es
mayor, podemos realizar una búsqueda binaria en la mitad derecha. De cualquier manera, ésta es una llamada recursiva a la
función de búsqueda binaria pasándole una lista más pequeña.