Está en la página 1de 10

Programación orientada a objetos II

UNIDAD 2 Ordenación y búsqueda

Universidad Abierta y a Distancia de México

Programación orientada a objetos II

UNIDAD 2 Ordenación y búsqueda

Actividades de aprendizaje

 Actividad 1. Métodos de ordenación

División de Ciencias Exactas, Ingeniería y Tecnología | Desarrollo de Software


1
Introducción

Los métodos de ordenación dentro de la estructura de datos permiten que a través de


algoritmos que ya tienen una secuencia de instrucciones que se han ido probando para
evaluar su rapidez, cantidad de memoria que se requiere, numero de repeticiones y
rendimiento.

 Indicaciones de la Actividad 1. Métodos de ordenación


1. Consulta en sitios confiables de Internet los siguientes conceptos:
a. Definición de los métodos de ordenación y búsqueda como parte de las estructuras de
datos.
ORDENACIÓN [ CITATION 20ag \l 2058 ]
La ordenación o clasificación de datos (sort, en inglés) es una operación consistente en
disponer un conjunto —estructura— de datos en algún determinado orden con respecto a
uno de los campos de los elementos del conjunto. Por ejemplo, cada elemento del conjunto
de datos de una guía telefónica tiene un campo nombre, un campo dirección y un campo
número de teléfono; la guía telefónica está dispuesta en orden alfabético de nombres. Los
elementos numéricos se pueden ordenar en orden creciente o decreciente de acuerdo al
valor numérico del elemento. En terminología de ordenación, el elemento por el cual está
ordenado un conjunto de datos (o se está buscando) se denomina clave. Una colección de
datos (estructura) puede ser almacenada en memoria central o en archivos de datos
externos guardados en unidades de almacenamiento magnético (discos, cintas, CD-ROM,
DVD, etc.). Cuando los datos se guardan en un array, en una lista enlazada o en un árbol,
se denomina ordenación interna; estos datos se almacenan exclusivamente para
tratamientos internos que se utilizan para gestión masiva de datos, se guardan en arrays de
una o varias dimensiones. Si los datos están almacenados en un archivo, el proceso de
ordenación se llama ordenación externa
La ordenación es el proceso de reagrupar o reorganizar un conjunto de datos en orden
creciente (o decreciente). Es un proceso que se practica con mucha frecuencia, y si bien
muchos lenguajes proveen herramientas que ejecutan esta tarea, es muy importante el
estudio de los métodos de ordenación básicos. [ CITATION Mar201 \l 2058 ]
BÚSQUEDA [ CITATION 20ag \l 2058 ]
Con mucha frecuencia, los programadores trabajan con grandes cantidades de datos
almacenados en arrays y registros, por lo que será necesario determinar si un array
contiene un valor que coincida con un cierto valor clave. El proceso de encontrar un
elemento específico de un array se denomina búsqueda

b. Características de los métodos de ordenación y búsqueda como parte de las estructuras


de datos. [ CITATION Gur20 \l 2058 ]
ORDENACIÓN POR INTERCAMBIO
El algoritmo de ordenación tal vez más sencillo sea el denominado de intercambio, que
ordena los elementos de una lista en orden ascendente. El algoritmo se basa en la lectura
sucesiva de la lista a ordenar, comparando el elemento inferior de la lista con los restantes y
efectuando un intercambio de posiciones cuando el orden resultante de la comparación no
sea el correcto
ORDENACIÓN POR SELECCIÓN
Considérese el algoritmo para ordenar un array a[] de enteros en orden ascendente, es
decir, si el array a[] tiene n elementos, se trata de ordenar los valores del array de modo que
a[0] sea el valor más pequeño, el valor almacenado en a[1] sea el siguiente más pequeño, y
así hasta a[n-1] que ha de contener el elemento de mayor valor. El algoritmo se apoya en
las pasadas que intercambian el elemento más pequeño, sucesivamente con el elemento de
la lista, a[], que ocupa la posición igual al orden de pasada (hay que considerar el índice 0).
La pasada inicial busca el elemento más pequeño de la lista y se intercambia con a[0],
primer elemento de la lista.

 Su tiempo de ejecución es O(N2 ) para el mejor, peor y caso promedio.


 Es el más fácil de codificar de los mostrados en este documento.
 Si el array de datos es A y su tamaño es N, lo que hace el algoritmo, para cada i de
[0..N-2] es intercambiar A[i] con el mínimo elemento del subarray [A[i+1], ..., A[N]].
 Dado que es muy simple de codificar, aunque no tiene los mejores tiempos de
ejecución, es apropiado utilizarlo para arrays de datos relativamente pequeños.

ORDENACIÓN POR INSERCIÓN


El método de ordenación por inserción es similar al proceso típico de ordenar tarjetas de
nombres (cartas de una baraja) por orden alfabético consistente en insertar un nombre en
su posición correcta dentro de una lista que ya está ordenada.

 Es un algoritmo sencillo de entender y de codificar.


 Si el tamaño de la entrada es N, entonces el orden del tiempo de ejecución, para el
peor caso es O(N2 );
 Si la entrada esta "casi ordenada", el algoritmo se ejecuta mucho más rápidamente.
Esta velocidad tiende a un tiempo O(N), peor caso que se cumple cuando la entrada
está totalmente ordenada.
 Es por la propiedad anterior que este algoritmo, a pesar de no ser el más rápido para
entradas grandes, suele usarse de la siguiente manera: Se semi ordena la entrada
con algún otro algoritmo más rápido y más adecuado para entradas grandes. Luego,
cuando tenemos la entrada "casi ordenada" usamos este algoritmo. La velocidad de
ejecución será muy buena por dos razones: su tiempo de ejecución tiende a O(N)
con entradas "casi ordenadas" (lo cual es un tiempo excelente), y la simpleza de su
implementación hará que se ejecute más rápido que otros algoritmos más complejos.
ORDENACIÓN SHELL
La ordenación Shell debe el nombre a su inventor, D. L. Shell. Se suele denominar también
ordenación por inserción con incrementos decrecientes. Se considera que el método Shell
es una mejora del método de inserción directa.
En el algoritmo de inserción, cada elemento se compara con los elementos contiguos de su
izquierda, uno tras otro. Si el elemento a insertar es el más pequeño, hay que realizar
muchas comparaciones antes de colocarlo en su lugar definitivo. El algoritmo de Shell
modifica los saltos contiguos resultantes de las comparaciones por saltos de mayor tamaño,
y con ello se consigue que la ordenación sea más rápida. Generalmente, se toma como
salto inicial n/2 (siendo n el número de elementos), y luego se reduce el salto a la mitad en
cada repetición hasta que sea de tamaño 1

 A diferencia del algoritmo de ordenación por inserción, este algoritmo intercambia


elementos distantes. Es por esto que puede deshacer más de una inversión en cada
intercambio, hecho del cual nos aprovechamos para ganar velocidad.
 La velocidad del algoritmo dependerá de una secuencia de valores (llamados
incrementos, de los cuales hablaremos más abajo) con los cuales trabaja
utilizándolos como distancias entre elementos a intercambiar. Veremos que con
algunas secuencias podremos obtener ordenes de tiempo de ejecución en el peor
caso de O(n2 ), O(n^(3/2)) y O(n^(4/3)).
 Se considera la ordenación de Shell como el algoritmo más adecuado para ordenar
entradas de datos moderadamente grandes (decenas de millares de elementos) ya
que su velocidad, si bien no es la mejor de todos los algoritmos, es aceptable en la
práctica y su implementación (código) es relativamente sencillo.

ORDENACIÓN RÁPIDA
(QuickSort) El algoritmo conocido como quicksort (ordenación rápida) recibe su nombre de
su autor, Tony Hoare. La idea del algoritmo es simple, se basa en la división en particiones
de la lista a ordenar, por ello se puede considerar que aplica la técnica "divide y vencerás".
El método es, posiblemente, el más pequeño de código, más rápido, más elegante y más
interesante y eficiente de los algoritmos conocidos de ordenación. Este método se basa en
dividir los n elementos de la lista a ordenar en dos partes o particiones separadas por un
elemento: una partición izquierda, un elemento central denominado pivote o elemento de
partición y una partición derecha. La partición o división se hace de tal forma que todos los
elementos de la primera sublista (partición izquierda) sean menores que todos los
elementos de la segunda sublista (partición derecha). Las dos sublistas se ordenan
entonces independientemente. Para dividir la lista en particiones (sublistas) se elige uno de
los elementos de la lista y se utiliza como pivote o elemento de partición. Si se elige una
lista cualquiera con los elementos en orden aleatorio, se puede elegir cualquier elemento de
la lista como pivote, por ejemplo, el primer elemento de la lista. Si la lista tiene algún orden
parcial que se conoce, se puede tomar otra decisión para escogerlo. Idealmente, el pivote
se debe elegir de modo que se divida la lista exactamente por la mitad de acuerdo al
tamaño relativo de las claves. Por ejemplo, si se tiene una lista de enteros de 1 a 10, 5 o 6
serían pivotes ideales, mientras que 1 o 10 serían elecciones “pobres” de pivotes. Una vez
que el pivote ha sido elegido, se utiliza para ordenar el resto de la lista en dos sublistas: una
tiene todas las claves menores que el pivote y la otra, todos los elementos (claves) mayores
o iguales que el pivote (o al revés). Estas dos listas parciales se ordenan recursivamente
utilizando el mismo algoritmo; es decir, se llama sucesivamente al propio algoritmo
quicksort. La lista final ordenada se consigue concatenando la primera sublista, el pivote y la
segunda lista, en ese orden, en una única lista. La primera etapa de quicksort es la división
o “particionado” recursivo de la lista hasta que todas las sublistas constan de sólo un
elemento

 Es el algoritmo de ordenación más rápido (en la práctica) conocido. Su tiempo de


ejecución promedio es O(N log(N)).
 Para el peor caso tiene un tiempo O(N2 ), pero si se codifica correctamente las
situaciones en las que sucede el peor caso pueden hacerse altamente improbables.
 EN la práctica, el hecho de que sea más rápido que los demás algoritmos de
ordenación con el mismo tiempo promedio O(N log(N)) está dado por un ciclo interno
muy ajustado (pocas operaciones).
 Al igual que el algoritmo de ordenación por intercalación, el algoritmo de ordenación
rápida es fruto de la técnica de resolución de algoritmos "divide y vencerás". Como
ya se explicó, la técnica de divide y vencerás se basa en, en cada recursión, dividir el
problema en subproblemas más pequeños, resolverlos cada uno por separado
(aplicando la misma técnica) y unir las soluciones.

Búsqueda secuencial
La búsqueda secuencial busca un elemento de una lista utilizando un valor destino llamado
clave. En una búsqueda secuencial (a veces llamada búsqueda lineal), los elementos de
una lista o vector se exploran (se examinan) en secuencia, uno después de otro. La
búsqueda secuencial es necesaria, por ejemplo, si se desea encontrar a la persona cuyo
número de teléfono es 958-220000 en un directorio o listado telefónico de su ciudad. Los
directorios de teléfonos están organizados alfabéticamente por el nombre del abonado en
lugar de por números de teléfono, de modo que deben explorarse todos los números, uno
después de otro, esperando encontrar el número 958-220000. El algoritmo de búsqueda
secuencial compara cada elemento del array con la clave de búsqueda. Dado que el array
no está en un orden prefijado, es probable que el elemento a buscar pueda ser el primer
elemento, el último elemento o cualquier otro. De promedio, al menos, el programa tendrá
que comparar la clave de búsqueda con la mitad de los elementos del array. El método de
búsqueda lineal funcionará bien con arrays pequeños o no ordenados.
Búsqueda binaria
La búsqueda secuencial se aplica a cualquier lista. Si la lista está ordenada, la búsqueda
binaria proporciona una técnica de búsqueda mejorada. Una búsqueda binaria típica es la
búsqueda de una palabra en un diccionario. Dada la palabra, se abre el libro cerca del
principio, del centro o del final dependiendo de la primera letra de la palabra que busca. Se
puede tener suerte y acertar con la página correcta, pero, normalmente, no será así y el
lector se mueve a la página anterior o posterior del libro. Por ejemplo, si la palabra comienza
con "J" y se está en la "L" se mueve uno hacia atrás. El proceso continúa hasta que se
encuentra la página buscada o hasta que se descubre que la palabra no está en la lista.
Una idea similar se aplica en la búsqueda en una lista ordenada. Se sitúa la lectura en el
centro de la lista y se comprueba si nuestra clave coincide con el valor del elemento central.
Si no se encuentra el valor de la clave, se sitúa uno en la mitad inferior o superior del
elemento central de
c. Semejanzas y diferencias de los métodos que identificaste.
Quicksort
 No requiere memoria adicional
 Rápida ejecución

 Trabaja con recursividad


 Implementación complicada

Burbuja
 Fácil implementación
 No requiere memoria adicional

 Realiza numerosas comparaciones


 Lento

Shellsort

 Eficiente para conjunto de elementos madianos menores a 1000

 Complejo al momento de analizar

Inserción

 Fácil implementación
 Requerimientos mínimos de memoria

 Lento
 Realiza numerosas comparaciones
Selección

 Fácil implementación
 No requiere memoria adicional
 Rendimiento constante: poca diferencia entre el peor y mejor caso

 Lento
 Realiza numerosas comparaciones

2. Elabora un esquema con base en tu investigación. Para realizar un esquema, debes


seguir estos pasos:

 Realiza una lectura comprensiva y reconoce las ideas principales y secundarias.

 Emplea palabras claves o frases cortas que representen el mensaje de forma breve.

 Incluye esas ideas principales y complementa con ideas secundarias para enriquecer el
esquema.

 Selecciona la forma de representación. Algunos ejemplos de esquema son: secuencial


jerárquico horizontal, secuencial jerárquico vertical, mapa conceptual o mapa mental
Programación orientada a objetos II
UNIDAD 2 Ordenación y búsqueda

insertar un nombre en
datos su posición correcta intercambia
relativamente dentro de una lista que elementos
pequeños ya está ordenada distantes

Selección
Shell
Inserción

datos
intercambio moderadamente
grandes
indirectos

Directos

intercambio Ordenación Quicksort


de
posiciones

proceso de técnica de
reagrupar o resolución
reorganizar un de
conjunto de datos algoritmo de
Ordenación y algoritmos
ordenación más
búsqueda "divide y
rápido
vencerás"

búsqueda de
una palabra en
un diccionario
Binaria Búsqueda
encontrar un
elemento
específico

Secuencial

busca un elemento
de una lista
utilizando un valor
destino llamado
clave

División de Ciencias Exactas, Ingeniería y Tecnología | Desarrollo de Software 8


Programación orientada a objetos II
UNIDAD 2 Ordenación y búsqueda

3. Incluye tu esquema en un documento en Word que contenga portada, introducción,


contenido y referencias.
a. *Todo trabajo enviado en formato distinto al solicitado, será evaluado con 1.
b. **Todo trabajo sin fuentes de consulta confiables en formato APA será evaluado
con 1.
4. Guarda tu actividad con la nomenclatura DEDA_U2_A1_XXYZ, Sustituye las XX por las
iniciales de tu primer nombre, la Y por la inicial de tu apellido paterno y la Z por la inicial de
tu segundo apellido.
5. Accede al foro Actividad 1. Métodos de ordenación y adjunta tu documento, al mismo
tiempo que generas una conclusión del tema incluyendo un ejemplo de la vida real en
donde se pueda requerir que los datos sean ordenados y almacenados en una estructura de
datos.
6. Revisa las aportaciones de por lo menos uno de tus compañeros(as) y coméntalos de
forma constructiva.
7. Consulta el instrumento de evaluación correspondiente para que conozcas los criterios
de revisión.

Ejemplo

Cada elemento del conjunto de datos de una guía telefónica tiene un campo nombre, un
campo dirección y un campo número de teléfono; la guía telefónica está dispuesta en orden
alfabético de nombres. Los elementos numéricos se pueden ordenar en orden creciente o
decreciente de acuerdo al valor numérico del elemento.

Conclusión

Conocer los diferentes métodos de ordenación y búsqueda y las características de cada uno
de ellos nos proporciona el poder determinar en qué problemáticas podemos implementar
uno u otro método y proporcionar la mejor opción para dar una solución satisfactoria.

División de Ciencias Exactas, Ingeniería y Tecnología | Desarrollo de Software


9
Bibliografía
Gurin, S. (8 de agosto de 2020). Algoritmos de ordenación. Obtenido de
http://es.tldp.org/Tutoriales/doc-programacion-algoritmos-ordenacion/alg_orden.pdf

Joyanes Aguilar, L., & Zahonero Martínez, I. (agosto de 2020). Estructuras de datos en
Java. Obtenido de file:///C:/Users/Deimos/Downloads/Estructura%20de%20datos
%20en%20java%20Joyanes%201ed.pdf

Martínez Juárez, M. (8 de agosto de 2020). Estructura de Datos II. Obtenido de


https://www.uaeh.edu.mx/docencia/P_Presentaciones/icbi/asignatura/metodosordena
cion.pdf

También podría gustarte