Objetivos
Una vez que se haya leído y estudiado este capítulo, usted podrá:
• Conocer los algoritmos basados en el intercambio de elementos.
• Conocer el algoritmo de ordenación por inserción.
• Conocer el algoritmo de selección.
• Distinguir entre los algoritmos de ordenación basados en el intercambio
y en la inserción.
• Saber la eficiencia de los métodos básicos de ordenación.
• Conocer los métodos más eficientes de ordenación.
• Aplicar métodos mas eficientes de ordenación de arrays.
• Ordenar vectores de objetos.
• Diferenciar entre búsqueda secuencial y búsqueda binaria.
Introducción
Muchas actividades humanas requieren que diferentes colecciones de elementos utilizados se pongan en un orden específico. Las oficinas de correo y las empresas de mensajería ordenan el correo y los paquetes por códigos postales con el objeto de conseguir una entrega eficiente; las facturas telefónicas se ordenan por la fecha de las llamadas; los anuarios o listines telefónicos se ordenan por orden alfabético de apellidos con el fin último de encontrar fácilmente el número de teléfono deseado; los estudiantes de una clase en la universidad se ordenan por sus apellidos o por los números de expediente.
Por estas circunstancias una de las tareas que realizan más frecuentemente las computadoras en el procesamiento de datos es la ordenación.
El estudio de diferentes métodos de ordenación es una tarea intrínsecamente interesante desde un punto de vista teórico y, naturalmente, práctico. Este capítulo estudia los algoritmos y las técnicas de ordenación más usuales y su implementación en Java; también la manera de ordenar objetos con la funcionalidad que proporcionan las clases en Java. De igual modo, se estudiará el análisis de los diferentes métodos de ordenación con el objetivo de conseguir la máxima eficiencia en su uso real.
En el capítulo se analizarán los métodos básicos y los más avanzados empleados en programas profesionales.
1. UNIVERSIDAD DE PANAMÁ
CENTRO REGIONAL UNIVERSITARIO DE COCLÉ
FACULTAD DE INFORMÁTICA, ELECTRÓNICA Y COMUNICACIÓN
LIC. EN INGENIERÍA EN SISTEMAS INFORMÁTICOS
ORDENACIÓN Y BÚSQUEDA
ASIGNATURA:
PROGRAMACIÓN II (INF212)
DOCENTE:
LUSDIELKA G. HERNÁNDEZ
ESTUDIANTE:
IRVING MORÁN
JOSÉ GUTIÉRREZ
LUIS FIGUEROA
ALBIS CORONADO
2020
2. Objetivos
Una vez que se haya leído y estudiado este capítulo, usted podrá:
• Conocer los algoritmos basados en el intercambio de
elementos.
• Conocer el algoritmo de ordenación por inserción.
• Conocer el algoritmo de selección.
• Distinguir entre los algoritmos de ordenación basados en el
intercambio
y en la inserción.
• Saber la eficiencia de los métodos básicos de ordenación.
• Conocer los métodos más eficientes de ordenación.
• Aplicar métodos mas eficientes de ordenación de arrays.
• Ordenar vectores de objetos.
• Diferenciar entre búsqueda secuencial y búsqueda binaria.
3. Introducción
Muchas actividades humanas requieren que diferentes colecciones de elementos
utilizados se pongan en un orden específico. Las oficinas de correo y las empresas de
mensajería ordenan el correo y los paquetes por códigos postales con el objeto de
conseguir una entrega eficiente; las facturas telefónicas se ordenan por la fecha de las
llamadas; los anuarios o listines telefónicos se ordenan por orden alfabético de apellidos
con el fin último de encontrar fácilmente el número de teléfono deseado; los estudiantes
de una clase en la universidad se ordenan por sus apellidos o por los números de
expediente.
Por estas circunstancias una de las tareas que realizan más frecuentemente las
computadoras en el procesamiento de datos es la ordenación.
El estudio de diferentes métodos de ordenación es una tarea intrínsecamente interesante
desde un punto de vista teórico y, naturalmente, práctico. Este capítulo estudia los
algoritmos y las técnicas de ordenación más usuales y su implementación en Java;
también la manera de ordenar objetos con la funcionalidad que proporcionan las clases
en Java. De igual modo, se estudiará el análisis de los diferentes métodos de ordenación
con el objetivo de conseguir la máxima eficiencia en su uso real.
En el capítulo se analizarán los métodos básicos y los más avanzados empleados en
programas profesionales.
4. Conceptos
preliminares
Clave: es una pieza de información que controla la
operación de un algoritmo de criptografía.
Habitualmente, esta información es una secuencia de
números o letras mediante la cual, en criptografía, se
especifica la transformación del texto plano en texto
cifrado, o viceversa.
Criterio de ordenamiento: el criterio que utilizamos para
asignar valores a los registros con base en una o más
claves.
Registro: es un algoritmo que pone elementos de
una lista o un vector . Las relaciones de orden más
usadas son el orden numérico y el orden lexicográfico.
6. ¿Que es?
Es el procedimiento en el cual se
agrupan los registros en orden
definido, con el fin de facilitar la
búsqueda de datos ordenados en
secuencia. el cual puede ser
numérico, alfabético o incluso
alfanumérico, ascendente o
descendente, el cual puede ser
numérico, alfabético o incluso
alfanumérico, ascendente o
descendente.
7. ¿Cuando se sabe cuando un
algoritmo es eficiente o mejor?
Un algoritmo es considerado eficiente si su consumo de recursos está en la media o por
debajo de los niveles aceptables. Hablando a grandes rasgos, 'aceptable' significa: que el
algoritmo corre en un tiempo razonable en una computadora dada
8. Grado de orden que tendrá el
algoritmo a manejar
Preciso: implica el orden
de realización de cada
uno de los pasos
Definido: si se sigue dos
veces, se obtiene el
mismo resultado.
Finito: Tiene un numero
determinado de pasos,
implica que tiene un fin.
9. Cantidad de datos o pasos a
manipular
1
Análisis del
problema Conducen al diseño detallado por medio
un código escrito en forma de un algoritmo
2
Diseño de
algoritmo
3 Codificación
Se implementa el algoritmo en un código escrito en
un lenguaje de programación. Refleja las ideas
desarrolladas en las etapas de análisis y diseño
4
Compilación y
ejecución
Traduce el programa fuente a programa en código
de maquina y lo ejecuta.
5 Verificación
Busca errores en las etapas anteriores y los elimina.
6 Depuración
7 Documentación
Son comentarios, etiquetas de texto, que facilitan la
comprensión del programa
10. Tipos de datos a ordenar
Se desea ordenar datos Algorítmicos los cuales
Utiliza un algoritmo y puede ser implementado en
una computadora Y datos Heurísticos: los Se
apoyan en el resultado obtenido en un análisis de
alternativas de experiencias anteriores similares.
12. Algoritmo de ordenación básicos
En computación y matemáticas un
algoritmo de ordenamiento es un
algoritmo que pone elementos de
una lista o un vector en una
secuencia dada por una relación
de orden
14. Ordenación por
selección
Consiste en encontrar
el menor de todos los
elementos del vector e
intercambiarlo con el
que está en la primera
posición.
15. Ordenación por inserción
Es una manera muy natural de
ordenar para un ser humano, y
puede usarse fácilmente para
ordenar un mazo de cartas
numeradas en forma arbitraria.
Requiere operaciones para ordenar
una lista de elementos.
16. Ordenación por burbujas
(bubblesort)
Es un sencillo algoritmo
de ordenamiento. Funciona
revisando cada elemento de
la lista que va a ser
ordenada con el siguiente,
intercambiándolos de
posición si están en
el orden equivocado.
17. Ordenación Shell
El método de ordenamiento
Shell consiste en dividir el arreglo (o
la lista de elementos) en intervalos (o
bloques) de varios elementos para
organizarlos después por medio
del ordenamiento de inserción
directa
DATO CURIOSO: su nombre proviene del
creador Donald Shell.
18. Ordenación rápida (quicksort)
Es un algoritmo basado en la
técnica de divide y vencerás,
que permite, en promedio,
ordenar n elementos en un
tiempo proporcional a n log
n.
19.
20. Ordenación Binsort
Es un algoritmo de
ordenamiento que
distribuye todos los
elementos a ordenar entre
un número finito de
casilleros.
21. Ordenación Radixsort
Radix es un algoritmo de
ordenamiento que ordena
enteros procesando sus
dígitos de forma
individual
24. Algoritmo de búsqueda
Un algoritmo de búsqueda es un conjunto de
instrucciones que están diseñadas para
localizar un elemento con ciertas propiedades
dentro de una estructura de datos; por
ejemplo, ubicar el registro correspondiente a
cierta persona en una base de datos, o el
mejor movimiento en una partida de ajedrez.
La variante más simple del problema es la
búsqueda de un número en un vector.
25. Pseudocódigo del algoritmo
EjemploDatos de entrada:
vec: vector en el que se desea buscar el dato
tam: tamaño del vector.
Los subíndices válidos van desde 0 hasta tam-1 inclusive.
Puede representarse así: vec[0...tam) o vec[0...tam-1]. dato:
elemento que se quiere buscar.
Datos de entrada:
vec: vector en el que se desea buscar el dato
tam: tamaño del vector. Los subíndices válidos van desde 0 hasta
tam-1 inclusive. Puede representarse así: vec[0...tam) o
vec[0...tam-1].
dato: elemento que se quiere buscar.
Variables
pos: posición actual en el vector
pos = 0
while pos < tam:
if vec[pos] == dato:
Retorne verdadero y/o pos,
else:
pos = pos + 1
Fin (while)
Retorne falso,
Int busquedaSimple(int vector[n],int n, int dato){
Int i;
For(i=0; i<m; i++)}
If(dato==vector[i]){
Return i;
}
}
Return -1;
}
26. Búsqueda binaria
Se utiliza cuando el vector en el que queremos
determinar la existencia de un elemento está
previamente ordenado. Este algoritmo reduce el
tiempo de búsqueda considerablemente, ya que
disminuye exponencialmente el número de iteraciones
necesarias.
Para implementar este algoritmo se compara el
elemento a buscar con un elemento cualquiera del
vector (normalmente el elemento central): si el valor
de éste es mayor que el del elemento buscado se repite
el procedimiento en la parte del vector que va desde el
inicio de éste hasta el elemento tomado, en caso
contrario se toma la parte del vector que va desde el
elemento tomado hasta el final.
27. Ejemplo
Datos de entrada:
vec: vector en el que se desea buscar el dato
tam: tamaño del vector. Los subíndices válidos van desde 0 hasta tam-1 inclusive.
dato: elemento que se quiere buscar.
Variables
centro: subíndice central del intervalo
inf: límite inferior del intervalo
sup: límite superior del intervalo
inf = 0
sup = tam-1
Mientras inf <= sup:
centro = ((sup - inf) / 2) + inf // División entera: se trunca la fracción
Si vec[centro] == dato devolver verdadero y/o pos, de lo contrario:
Si dato < vec[centro] entonces:
sup = centro - 1
En caso contrario:
inf = centro + 1
Fin (Mientras)
Devolver Falso
28. Conclusión
A medida que fuimos desarrollando el trabajo fuimos aprendiendo más sobre este tema que por los vistos
tienes una amplitud en cuanto su uso primero empezando por la definición de preliminares dirigido a la
programación las diferentes partes que lo compones en este trabajo verán de forma más profunda este término
al igual que las claves, criterios de ordenación y registros como el segundo puntos tenemos ordenamiento de
datos el tercer punto como se sabe cuál es el mejor algoritmo. vemos las incógnitas que se forman con esta
pregunta el cuanto punto es el concepto de ordenación el cual tienes una gran variedad de sub temas en os
que destacan la ordenación por intercambio, por selección y por inserción la ordenación de burbuja la
ordenación de Shell la cual lleva ese nombre por su creador Donald Shell y el quick sort.
El cual es un poco difícil, pero gracias a su alta eficiencia esta está entre los mejores. Vimos las desventajas
de algunas ordenaciones para profundizar más en ellas los pasos que se siguen para desarrollar una
algoritmos de quick sort por ultimo en el curatos puntos las ordenación de Bin sort y Radix sort viento el
punto cinco búsqueda de datos y estos se divide en dos sub temas búsqueda secuencial que también se conoce
como búsqueda lineal y búsqueda binaria.
se conoció cada uno de los tipos de métodos de búsqueda ya que al momento de hacer un
programa extenso podríamos utilizar algunos de estos métodos y así encontrar la información más
rápida y no perder tanto tiempo.
29. Bibliografí
a
blogspot. (16 de 6 de 2016). blogspot. Obtenido de blogspot: http://ordendata.blogspot.com/
López. (s.f.). LAPA. Obtenido de
http://132.248.48.64/repositorio/moodle/pluginfile.php/1472/mod_resource/content/1/contenido/index.html#:~:text=El%20m%C3%A9todo
%20de%20ordenamiento%20Shell,del%20ordenamiento%20de%20inserci%C3%B3n%20directa.
lwh.free. (s.f.). Obtenido de lwh.free:
http://lwh.free.fr/pages/algo/tri/tri_rapide_es.html#:~:text=El%20algoritmo%20fundamental%20es%20el,y%20al%20otro%20los%20mayor
es.
Monografias. (15 de 5 de 2015). monografias. Obtenido de monografias:
https://www.monografias.com/trabajos15/algoritmos/algoritmos.shtml#DISE%C3%91O
quicksort. (s.f.). quicksort. Obtenido de http://quicksort.yolasite.com/antecedentes.php
rmurillo95. (s.f.). www.monografias.com. Obtenido de https://www.monografias.com/trabajos/algordenam/algordenam.shtml
Sarango, J. (s.f.). scribd. Obtenido de https://es.scribd.com/document/445950137/binsort-y-radixsort
Wandy, j. (s.f.). techlandia. Obtenido de techlandia: https://techlandia.com/ventajas-desventajas-algoritmos-ordenamiento-info_181515/
wiipedia. (s.f.). wikipedia . Obtenido de
https://es.wikipedia.org/wiki/Ordenamiento_por_casilleros#:~:text=El%20ordenamiento%20por%20casilleros%20(bucket,que%20cumplan
%20unas%20determinadas%20condiciones.
wikipedia. (s.f.). Obtenido de wikipedia: https://es.wikipedia.org/wiki/Ordenamiento_Radix
wikipedia. (21 de junio de 2020). Obtenido de https://es.wikipedia.org/wiki/Ordenamiento_por_selecci%C3%B3n
Willams, Jr., Louis F. (1975). A modification to the half-interval search (binary search) method. Proceedings of the 14th ACM Southeast
Conference. pp. 95-101. doi:10.1145/503561.503582.
Knuth, 1998, §6.2.1 ("Searching an ordered table"), subsection "Binary search".
Cormen et al., 2009, p. 39.
Weisstein, Eric W. «Binary Search». En Weisstein, Eric W, ed. MathWorld (en inglés). Wolfram Research.
Flores, Ivan; Madpis, George (1971). «Average binary search length for dense ordered lists». CACM 14 (9): 602-603.
doi:10.1145/362663.362752.
a b Bottenbruch, Hermann (1962).