75
M.C. Yalu Galicia Hdez. ( FCC/BUAP) 1 Ordenamiento Algoritmos

M.C. Yalu Galicia Hdez. (FCC/BUAP)1 Ordenamiento Algoritmos

Embed Size (px)

Citation preview

Page 1: M.C. Yalu Galicia Hdez. (FCC/BUAP)1 Ordenamiento Algoritmos

M.C. Yalu Galicia Hdez. (FCC/BUAP)

1

Ordenamiento

Algoritmos

Page 2: M.C. Yalu Galicia Hdez. (FCC/BUAP)1 Ordenamiento Algoritmos

M.C. Yalu Galicia Hdez. (FCC/BUAP)

2

Algoritmos de Ordenamiento Ordenar: Reagrupar o reorganizar un

conjunto de datos u objetos en una secuencia específica

Formalmente: Se define la ordenación de la siguiente forma: Sea A una lista de N elementos A1, A2, ... An.

Ordenar significa permutar estos elementos de tal forma que los mismos queden de acuerdo a un orden predeterminado

Ascendente: A1 A2 A3 ... An Descendente: A1 A2 A3 ... An

Page 3: M.C. Yalu Galicia Hdez. (FCC/BUAP)1 Ordenamiento Algoritmos

M.C. Yalu Galicia Hdez. (FCC/BUAP)

3

Ordenamiento Para realizar un ordenamiento se

pueden tener 3 casos: Peor caso: Que la información este

ordenada en sentido inverso Mejor caso: Que la información este

ordenada Caso promedio: Que la información

este desordenada aleatoriamente

Page 4: M.C. Yalu Galicia Hdez. (FCC/BUAP)1 Ordenamiento Algoritmos

M.C. Yalu Galicia Hdez. (FCC/BUAP)

4

Métodos de ordenamiento A los métodos de ordenamiento se les

clasifica en categorías Ordenación interna u ordenamiento en

memoria: Son aquellos en los que los valores a ordenar están en memoria principal.

Métodos directos Métodos logarítmicos

Ordenación externa u ordenamiento en archivos: Son aquellos en los que los valores a ordenar están en memoria secundaria (disco, cinta, cilindro magnético, etc)

Page 5: M.C. Yalu Galicia Hdez. (FCC/BUAP)1 Ordenamiento Algoritmos

M.C. Yalu Galicia Hdez. (FCC/BUAP)

5

Ordenación interna Métodos directos

Tienen la característica de que sus programas son cortos, de fácil elaboración y comprensión, aunque son ineficientes cuando el número de elementos es grande.

Métodos logarítmicos Son más complejos que los métodos directos.

Cierto es que requieren de menos comparaciones y movimientos para ordenar sus valores, pero su elaboración y comprensión resulta mas sofisticada y abstracta

Page 6: M.C. Yalu Galicia Hdez. (FCC/BUAP)1 Ordenamiento Algoritmos

M.C. Yalu Galicia Hdez. (FCC/BUAP)

6

Métodos directos Los métodos directos se pueden clasificar

en las siguientes categorías: Ordenamiento por intercambio

El más conocido es el método de la burbuja o BubbleSort

Método de intercambio por vibración (ShakeSort) Ordenamiento por inserción

Método de inserción directa Método de inserción por decremento decreciente

( ShellSort) Ordenamiento por selección

Método por selección directa

Page 7: M.C. Yalu Galicia Hdez. (FCC/BUAP)1 Ordenamiento Algoritmos

M.C. Yalu Galicia Hdez. (FCC/BUAP)

7

Métodos logarítmicos Los métodos logarítmicos se

pueden clasificar en: Ordenamiento por partición

QuickSort MergeSort HeapSort

Page 8: M.C. Yalu Galicia Hdez. (FCC/BUAP)1 Ordenamiento Algoritmos

M.C. Yalu Galicia Hdez. (FCC/BUAP)

8

Método de la Burbuja Se comparan pares de elementos adyacentes Si A[j-1] es mayor que A[j], se permutan Se continúa hasta que todos se encuentren ordenados En cada pasada se transporta el elemento más

pequeño hacia la izquierda del vector.

i j-1 j

Elementos ya ordenados

Se busca el i-ésimo elemento más pequeño, j varía desde N hasta i+1

Si a[j-1] > a[j], se permutan

Page 9: M.C. Yalu Galicia Hdez. (FCC/BUAP)1 Ordenamiento Algoritmos

M.C. Yalu Galicia Hdez. (FCC/BUAP)

9

Algoritmo de BurbujaInicio

para i 1 hasta N hacerpara j N hasta i+1 hacer (-1)

si A[j] < A[j-1] entoncesaux A[j]A[j] A[j-1]A[j-1] aux

fin_parafin_para

Fin

Page 10: M.C. Yalu Galicia Hdez. (FCC/BUAP)1 Ordenamiento Algoritmos

M.C. Yalu Galicia Hdez. (FCC/BUAP)

10

Actividad colaborativaActividad colaborativaActividad: trabajar en binas y utilizando el método de la burbuja ordenar el siguiente arreglo.

Deberán mostrar todas las pasada requeridas para ordenar el arreglo original.

16 67 8 15 44 27 17 35

Page 11: M.C. Yalu Galicia Hdez. (FCC/BUAP)1 Ordenamiento Algoritmos

M.C. Yalu Galicia Hdez. (FCC/BUAP)

11

Actividad grupal (SOLUCION) Compartiendo la experiencia

Page 12: M.C. Yalu Galicia Hdez. (FCC/BUAP)1 Ordenamiento Algoritmos

12

Método de inserción directa Reubicar en el lugar correcto, cada uno de los elementos a

ordenar. En el i-ésimo recorrido se inserta el i-ésimo elemento en el

lugar correcto. Es decir, entre A1, A2, ...Ai-1 los cuales fueron ordenados previamente.

A1 A2 A3 ... Ai-2 Ai-1 Ai Ai+1

... An

Si A[i] < A[i-1], se permutan

A1 A2 A3 ... Ai-2 Ai Ai-1 Ai+1

... An

Si A[i] < A[i-2], se permutanAi-1 elementos ordenados

A1 A2 A3 Ai ... Ai-2 Ai-1 Ai+1

... An

Si A[i] > A[3] CONDICIÓN DE PARO - elementos ordenados

Ai elementos ordenados

Page 13: M.C. Yalu Galicia Hdez. (FCC/BUAP)1 Ordenamiento Algoritmos

M.C. Yalu Galicia Hdez. (FCC/BUAP)

13

Algoritmo del método de inserciónInicio

para i 1 hasta N hacer j i+1Mientras A[j] < A[j-1] AND j > 1 Hacer

aux A[j]A[j] A[j-1]A[j-1] auxj j - 1

fin mientrasfin para

Fin

Page 14: M.C. Yalu Galicia Hdez. (FCC/BUAP)1 Ordenamiento Algoritmos

M.C. Yalu Galicia Hdez. (FCC/BUAP)

14

Actividad colaborativaActividad colaborativaActividad: tienen 15 minutos para trabajar en binas y utilizando el método de la inserción directa ordenar el siguiente arreglo.

Deberán mostrar todas las pasada requeridas para ordenar el arreglo original.

12 8 10 14 6 3 9 11

Page 15: M.C. Yalu Galicia Hdez. (FCC/BUAP)1 Ordenamiento Algoritmos

M.C. Yalu Galicia Hdez. (FCC/BUAP)

15

Actividad grupal (SOLUCION) Compartiendo la experiencia

Page 16: M.C. Yalu Galicia Hdez. (FCC/BUAP)1 Ordenamiento Algoritmos

16

Método de selección directa Encontrar el menor de todos los elementos del arreglo e

intercambiarlo con el que esta en la posición 1 Luego el segundo más pequeño e intercambiarlo con el que esta

en la posición 2 Así sucesivamente hasta ordenar todo el arreglo

A1 A2 A3 Aj Ai-2 Ai-1 Ai Ai+1

... An

Si Aj es el más pequeño, permutarlo a la 1er. posición

Aj Ai+1

A1 A2 Ai A3 A4 Ai-2 ... An

Si A4 es el i-ésimo más pequeño, entonces permutar a la i-ésima posición

i-1 elementos ordenados

Page 17: M.C. Yalu Galicia Hdez. (FCC/BUAP)1 Ordenamiento Algoritmos

M.C. Yalu Galicia Hdez. (FCC/BUAP)

17

Algoritmo de Selección directaInicio

para i 1 hasta N-1 hacerposMenor ivalorMenor A[i]para j i+1 hasta N hacer

si A[j] < valorMenor entoncesposMenor jvalorMenor A[j]

fin_sifin_paraA[posMenor] A[i]A[i] valorMenor

fin_paraFin

Page 18: M.C. Yalu Galicia Hdez. (FCC/BUAP)1 Ordenamiento Algoritmos

M.C. Yalu Galicia Hdez. (FCC/BUAP)

18

Actividad colaborativaActividad colaborativaActividad: tienen 10 minutos para trabajar en binas y utilizando el método de la selección directa ordenar el siguiente arreglo.

Deberán mostrar todas las pasada requeridas para ordenar el arreglo original.

78 10 35 7 1 56 12 2

Page 19: M.C. Yalu Galicia Hdez. (FCC/BUAP)1 Ordenamiento Algoritmos

M.C. Yalu Galicia Hdez. (FCC/BUAP)

19

Actividad grupal (SOLUCION) Compartiendo la experiencia

Page 20: M.C. Yalu Galicia Hdez. (FCC/BUAP)1 Ordenamiento Algoritmos

M.C. Yalu Galicia Hdez. (FCC/BUAP)

20

¿Que aprendimos?

Page 21: M.C. Yalu Galicia Hdez. (FCC/BUAP)1 Ordenamiento Algoritmos

21

Shell Sort También llamado Inserción por incremento decreciente Ordena el arreglo de manera similar al del método de

inserción directa, esto es, comparando con los elementos contiguos de su izquierda uno tras otro.

Este método se basa en la ordenación por inserción de los elementos que difieren h1-posiciones, después de los que difieren h2-posiciones, y así sucesivamente según un conjunto de incrementos decrecientes hi, hasta ordenar los que difieren en ht=1 .

El método se basa en fijar el tamaño de los huecos constantes, pero de más de una posición. Por ejemplo:

h1 se toma inicialmente de N/2 Y luego se va reduciendo a la mitad en cada

repetición hasta que el hueco sea 1.

Page 22: M.C. Yalu Galicia Hdez. (FCC/BUAP)1 Ordenamiento Algoritmos

M.C. Yalu Galicia Hdez. (FCC/BUAP)

22

Algoritmo ShellSortAlgoritmo ShellSort inicio

h N/2 //hueco inicialMientras h >= 1 hacer

Para i h hasta N hacertemp = A[i]j iMientras j >= h && temp < A[j-h]

hacerA[j] A[j-h];j j - h;

fin_mientras A[j] temp;

fin_parah h/2

fin_mientras Fin

Page 23: M.C. Yalu Galicia Hdez. (FCC/BUAP)1 Ordenamiento Algoritmos

M.C. Yalu Galicia Hdez. (FCC/BUAP)

23

Actividad colaborativaActividad colaborativaActividad: tienen 10 minutos para trabajar en binas y utilizando el método ShellSort deducir las secuencias parciales de clasificación para ordenar en ascendente el vector

6 1 5 2 3 4 0

Page 24: M.C. Yalu Galicia Hdez. (FCC/BUAP)1 Ordenamiento Algoritmos

M.C. Yalu Galicia Hdez. (FCC/BUAP)

24

Actividad grupal (SOLUCION) Compartiendo la experiencia

Page 25: M.C. Yalu Galicia Hdez. (FCC/BUAP)1 Ordenamiento Algoritmos

25

Método QuickSort Se basa en el hecho que es más fácil ordenar dos

listas pequeñas que una grande. Se basa en la estrategia “divide y venceras”

Los elementos a ordenar se dividen en dos grupos: Uno con todos los valores menores o iguales a cierto valor específico y otra con todos los valores mayores a ese valor.

El valor elegido puede ser cualquier valor arbitrario del vector. Este valor se le llama comúnmente pivote.

Básicamente quickSort trabaja así: Se elige el pivote (usualmente el elemento a

la mitad de la lista)

Page 26: M.C. Yalu Galicia Hdez. (FCC/BUAP)1 Ordenamiento Algoritmos

M.C. Yalu Galicia Hdez. (FCC/BUAP)

26

Método QuickSort Se divide la lista en dos partes. Para esto

se establecen dos indices (izquierdo y derecho) que se mueven hasta encontrarse. Se trata que todos los elementos a la izquierda del pivote sean menores que este y los elementos a la derecha sean mayores.

Si bien se tiene ahora dos listas con valores menores y mayores al pivote, estas pueden no estar ordenadas,entonces se vuleve a aplicar el método a cada uno de los subconjuntos

Page 27: M.C. Yalu Galicia Hdez. (FCC/BUAP)1 Ordenamiento Algoritmos

M.C. Yalu Galicia Hdez. (FCC/BUAP)

27

QuickSort

18 11 27 13 9 4 16

pivote DerIzq

Se recorre la lista desde el extremo izquierdo y se busca un elemento mayor que 13 (se encuentra el 18). Se busca entonces, desde el extremo derecho un valor menor que 13 ( se encuentra el 4). Se intercambian estos valores.

4 11 27 13 9 18

16

pivote Der

Izq

Se sigue recorriendo el vector por la izquierda y por la derecha e intercambiando los valores incorrectos hasta que los índices Izq y Der se crucen. En este punto se tendrá que todos los valores a la derecha son mayores y que todos los valores a la izq, son menores que el pivote.

Después del intercambio

Page 28: M.C. Yalu Galicia Hdez. (FCC/BUAP)1 Ordenamiento Algoritmos

M.C. Yalu Galicia Hdez. (FCC/BUAP)

28

QuickSort

Ninguna de ambas listas está ordenada; sin embargo, basados en los resultados de la primera partición, se pueden ordenar las dos particiones independientemente y al final la lista completa estará ordenada

4 11 27 13 9 18

16

DerIzq pivote

4 11 9 13 27

18

16

DerIzq pivote

4 11 9 13 27

18

16

IzqDer pivote

< >4 11 9 13 2

718

16

Izq Der

pivote

Ordenar partición izquierda

Después del intercambio

Page 29: M.C. Yalu Galicia Hdez. (FCC/BUAP)1 Ordenamiento Algoritmos

M.C. Yalu Galicia Hdez. (FCC/BUAP)

29

Algoritmo QuickSortInicio

establecer x al valor de un elemento arbitrario de la listamientras división no este terminada hacer

recorrer de izq a der para un valor >= xrecorrer de der a izq para un valor =< xsi valores localizados no ordenados

entoncesintercambiar los valores

fin_sifin_mientras

Fin

Page 30: M.C. Yalu Galicia Hdez. (FCC/BUAP)1 Ordenamiento Algoritmos

M.C. Yalu Galicia Hdez. (FCC/BUAP)

30

Actividad colaborativaActividad colaborativaActividad: tienen 30 minutos para trabajar en binas y obtener el algoritmos del QuickSort, después utilizando este ordenar el siguiente arreglo.

Deberán mostrar todas las pasada requeridas para ordenar el arreglo original.

50 30 20 80 90 70 95 85 10 15 75 25

Page 31: M.C. Yalu Galicia Hdez. (FCC/BUAP)1 Ordenamiento Algoritmos

M.C. Yalu Galicia Hdez. (FCC/BUAP)

31

Actividad grupal (SOLUCION) Compartiendo la experiencia

Page 32: M.C. Yalu Galicia Hdez. (FCC/BUAP)1 Ordenamiento Algoritmos

M.C. Yalu Galicia Hdez. (FCC/BUAP)

32

Búsqueda

Métodos

Page 33: M.C. Yalu Galicia Hdez. (FCC/BUAP)1 Ordenamiento Algoritmos

M.C. Yalu Galicia Hdez. (FCC/BUAP)

33

Búsqueda La búsqueda de información está

relacionada con las tablas para consultas Estas tablas contienen una cantidad de

información que se almacena en forma de listas de parejas de datos. Por ejemplo: Un diccionario con una lista de palabras y

definiciones Un catálogo con una lista de libros de computación Una lista de estudiantes y sus calificaciones Un índice con títulos y contenidos de los artículos en

una determinada revista Etc.

En todos estos casos es necesario con frecuencia buscar un elemento en una lista.

Page 34: M.C. Yalu Galicia Hdez. (FCC/BUAP)1 Ordenamiento Algoritmos

M.C. Yalu Galicia Hdez. (FCC/BUAP)

34

Búsqueda En el caso de un vector de datos numéricos

la búsqueda se reduce a buscar si el vector contiene o no un número dado T

Si se desea búscar información en un archivo, debe realizarse la búsqueda a partir de un determinado campo de información denominado campo clave o llave. En el caso de los archivos de empleados de

una empresa, el campo clave puede ser su número de empleado o los apellidos.

Page 35: M.C. Yalu Galicia Hdez. (FCC/BUAP)1 Ordenamiento Algoritmos

M.C. Yalu Galicia Hdez. (FCC/BUAP)

35

Búsqueda Existen diferentes algorítmos de búsqueda.

El algoritmo elegido dependerá de la forma en que se encuentren organizados los datos

La operación de búsqueda de un elemento N en un conjunto consiste en: Determinar si N pertenece al conjunto y, en

ese caso, indicar su posición en él. Determinar si N no pertenece al conjunto

Los métodos más usuales de búsqueda son: Búsqueda secuencial o lineal Búsqueda binaria Búsqueda por transformación de claves(hash)

Page 36: M.C. Yalu Galicia Hdez. (FCC/BUAP)1 Ordenamiento Algoritmos

M.C. Yalu Galicia Hdez. (FCC/BUAP)

36

Búsqueda secuencial Se recorre el vector o la lista desde el

principio, comparando cada elemento con el elemento buscado. Si se llega al final del vector sin encontrarlo, se supone que el elemento buscado no pertenece al vector.

No es necesario que el vector o la lista estén ordenados

Si el vector esta ordenado, la búsqueda puede detenerse en cuanto se llega a un elemento posterior al elemento buscado.

Page 37: M.C. Yalu Galicia Hdez. (FCC/BUAP)1 Ordenamiento Algoritmos

M.C. Yalu Galicia Hdez. (FCC/BUAP)

37

Actividad colaborativaActividad colaborativaActividad: tienen 30 minutos para trabajar en binas y practicar el método de búsqueda secuencial.

Hacer un programa que capture la información de un arreglo de alumnos, c/u con la sig. información

La FCC desea saber si el alumno con la matrícula 200400010 está presente en el conjunto.

Si el alumno se encuentra, mostrar el mensaje “Alumno encontrado en la posición =“ y mostrar toda su información

Matrícula

Nombre

promedio

Page 38: M.C. Yalu Galicia Hdez. (FCC/BUAP)1 Ordenamiento Algoritmos

M.C. Yalu Galicia Hdez. (FCC/BUAP)

38

Actividad colaborativaActividad colaborativaSi no se encuentra mostrar el mensaje “Alumno no encontrado”

Implementar como método de la clase FCC el algoritmo de búsqueda secuencial

Colaborativamente: Trabajen en equipo, asegurándose de que comprenden el algoritmo de búsqueda y como se aplica.

Criterios para el éxito: Cada integrante del equipo deberá ser capaz de pasar al frente y explicar al grupo el algoritmo de ordenamiento con una prueba de escritorio

Responsabilidad Individual: Cualquier integrante del equipo podrá ser seleccionad@ aleatoriamente para exponer su programa. Su calificación será la del equipo.

Page 39: M.C. Yalu Galicia Hdez. (FCC/BUAP)1 Ordenamiento Algoritmos

M.C. Yalu Galicia Hdez. (FCC/BUAP)

39

Actividad grupal (SOLUCION) Compartiendo la experiencia

Page 40: M.C. Yalu Galicia Hdez. (FCC/BUAP)1 Ordenamiento Algoritmos

M.C. Yalu Galicia Hdez. (FCC/BUAP)

40

Búsqueda Binaria La búsqueda binaria utiliza el método “divide y

vencerás” para localizar el valor deseado. Con este método se examina primero el

elemento central de la lista: Si este es el elemento búscado, entonces la búsqueda

ha terminado. En caso contrario se determina si el elemento

buscado esta en la primera o segunda mitad de la lista y a continuación, se repite el proceso utilizando el elemento central de esa sublista.

Para utilizar este algoritmo es necesario que la colección esté ordenada, no funciona con arreglos desordenados.

Page 41: M.C. Yalu Galicia Hdez. (FCC/BUAP)1 Ordenamiento Algoritmos

M.C. Yalu Galicia Hdez. (FCC/BUAP)

41

Búsqueda binaria La búsqueda binaria se puede implementar

de modo iterativo y de modo recursivo.

4 6 8 10 12

14

16

Derecho izquierdo

Central

8

Elemento a buscar

8 < 10, Búsqueda en subvector izquierdo

4 6 8

Central

8 > 6, Búsqueda en sub-subvector Derecho

8

Elemento buscado = central, fin de la búsqueda

Page 42: M.C. Yalu Galicia Hdez. (FCC/BUAP)1 Ordenamiento Algoritmos

M.C. Yalu Galicia Hdez. (FCC/BUAP)

42

Algoritmo iterativoAlgoritmo Busqueda Binaria (clave) Inicio

izq 1der Ncentral (izq+der)/2mientras (izq <= der) y (A[central] <> clave) hacer

si clave < A[central] entoncesder central –1 // mover a subvector izq.

sinoizq central +1 // mover a subvector

der.fin_sicentral (izq+der)/2

fin_mientrassi clave = A[central] entonces

escribir “Valor encontrado en: “, centralsino

escribri “Valor no encontrado”fin_si

Fin

Page 43: M.C. Yalu Galicia Hdez. (FCC/BUAP)1 Ordenamiento Algoritmos

M.C. Yalu Galicia Hdez. (FCC/BUAP)

43

Actividad colaborativaActividad colaborativaActividad: tienen 15 minutos para trabajar en binas y utilizando el método de búsqueda binaria iterativa búscar la palabra examen en el siguiente conjunto

Mostrar paso a paso la búsqueda efectuada.

Alumno

Casa Diez Examen

Foco Grupo Inicio Sierra Tubo

Page 44: M.C. Yalu Galicia Hdez. (FCC/BUAP)1 Ordenamiento Algoritmos

M.C. Yalu Galicia Hdez. (FCC/BUAP)

44

Actividad colaborativaActividad colaborativa Colaborativamente: Trabajen en equipo,

asegurándose de que comprenden el algoritmo de búsqueda binaria y como se aplica.

Criterios para el éxito: Cada integrante del equipo deberá ser capaz de pasar al frente y explicar al grupo el algoritmo con una prueba de escritorio

Responsabilidad Individual: Cualquier integrante del equipo podrá ser seleccionad@ aleatoriamente para exponer su programa. Su calificación será la del equipo.

Page 45: M.C. Yalu Galicia Hdez. (FCC/BUAP)1 Ordenamiento Algoritmos

M.C. Yalu Galicia Hdez. (FCC/BUAP)

45

Actividad grupal (SOLUCION) Compartiendo la experiencia

Page 46: M.C. Yalu Galicia Hdez. (FCC/BUAP)1 Ordenamiento Algoritmos

M.C. Yalu Galicia Hdez. (FCC/BUAP)

46

Actividad colaborativaActividad colaborativaActividad: tienen 15 minutos para trabajar en binas y obtener el método de búsqueda binaria recursiva. Después, prueba tu método al buscar la palabra Grupo en el siguiente conjunto

Mostrar paso a paso la búsqueda efectuada.

Alumno

Casa Diez Examen

Foco Grupo Inicio Sierra Tubo

Page 47: M.C. Yalu Galicia Hdez. (FCC/BUAP)1 Ordenamiento Algoritmos

M.C. Yalu Galicia Hdez. (FCC/BUAP)

47

Actividad colaborativaActividad colaborativa Colaborativamente: Trabajen en equipo,

asegurándose de que comprenden el algoritmo de búsqueda binaria y como se aplica.

Criterios para el éxito: Cada integrante del equipo deberá ser capaz de pasar al frente y explicar al grupo el algoritmo con una prueba de escritorio

Responsabilidad Individual: Cualquier integrante del equipo podrá ser seleccionad@ aleatoriamente para exponer su programa. Su calificación será la del equipo.

Page 48: M.C. Yalu Galicia Hdez. (FCC/BUAP)1 Ordenamiento Algoritmos

M.C. Yalu Galicia Hdez. (FCC/BUAP)

48

Actividad grupal (SOLUCION) Compartiendo la experiencia

Page 49: M.C. Yalu Galicia Hdez. (FCC/BUAP)1 Ordenamiento Algoritmos

M.C. Yalu Galicia Hdez. (FCC/BUAP)

49

Templates

Plantillas de funciones

y clases

Page 50: M.C. Yalu Galicia Hdez. (FCC/BUAP)1 Ordenamiento Algoritmos

M.C. Yalu Galicia Hdez. (FCC/BUAP)

50

Plantillas Una de las características más poderosas de C++ son las

plantillas. Las plantillas nos permiten especificar, con un solo segmento

de código, un rango completo de funciones relacionadas (sobrecargadas), llamadas funciones de plantilla, o un rango completo de clases relacionadas llamadas clases de plantilla.

Podríamos escribir una sola plantilla de función para una función de ordenamiento de arreglos y luego hacer que C++ generara automáticamente funciones de plantilla separadas que ordenaran arreglos de enteros, de reales, de cadenas, etc.

Page 51: M.C. Yalu Galicia Hdez. (FCC/BUAP)1 Ordenamiento Algoritmos

M.C. Yalu Galicia Hdez. (FCC/BUAP)

51

Plantillas de funcion v.s. funciones de plantilla Es importante observar la diferencia entre las

plantillas de función y las funciones de plantilla. Las plantillas de función y las plantillas de clase son

como plantillas (moldes) con los cuales trazamos formas.

Las funciones de plantilla y las clases de plantilla son como los trazos separados, que tiene la misma forma pero pueden trazarse, por ejemplo, en colores diferentes.

Page 52: M.C. Yalu Galicia Hdez. (FCC/BUAP)1 Ordenamiento Algoritmos

M.C. Yalu Galicia Hdez. (FCC/BUAP)

52

Plantillas de función La definición de plantillas de función es de la

siguiente forma:

Template <class T> T maximo (T valor1, T valor2, T valor3) {

T max = valor1;

if ( valor2 > max) max = valor2;

if (valor3 > max)max = valor3;

return max; }

Los parámetros formales de tipo son tipos primitivos o definidos por el usuario que se utilizan para especificar los tipos de argumento de la función, el tipo de devolución de la función y para declarar variables dentro del cuerpo de la definición de la función.

Template indica que es una

platilla

Lista de parámetros formales de tipo (<>)precedidos por la palabra clave class

Cuerpo de la definición de la

función

Page 53: M.C. Yalu Galicia Hdez. (FCC/BUAP)1 Ordenamiento Algoritmos

M.C. Yalu Galicia Hdez. (FCC/BUAP)

53

Plantillas de función La plantilla de función anterior declara un solo

parametro formal de tipo T como el tipo de datos que la función maximo probará.

Cuando el compilador detecte una llamada a maximo en el código del programa fuente, el tipo de datos pasados a maximo se sustituye por T en toda la definición de la platilla y C++ crea una función completa que determina el máximo de tres valores del tipo de datos especificado.

Después se compila la nueva función. Las plantillas, son por tanto, medios para generar

código.

Page 54: M.C. Yalu Galicia Hdez. (FCC/BUAP)1 Ordenamiento Algoritmos

M.C. Yalu Galicia Hdez. (FCC/BUAP)

54

Ejemplo completo de maximo//Uso de plantillas de funcion (templates)#include <iostream.h>

template <class T>T maximo (T valor1, T valor2, T valor3) {

T max = valor1;if(valor2 > max)

max = valor2;if(valor3 > max)

max = valor3; return max;}

int main() {int int1, int2, int3;cout << "Introduzca 3 valores de tipo entero: ";cin >> int1 >> int2 >> int3;

Page 55: M.C. Yalu Galicia Hdez. (FCC/BUAP)1 Ordenamiento Algoritmos

M.C. Yalu Galicia Hdez. (FCC/BUAP)

55

Ejemplo completo de maximocout << "El valor maximo de los tres es: " << maximo(int1, int2, int3) << endl; //version con enteros

//versión realesdouble db1, db2, db3;cout << "Introduzca 3 valores de tipo real: ";cin >> db1 >> db2 >> db3;cout << "El valor maximo de los tres es: " << maximo(db1, db2, db3) << endl; //version con doubles

//versión caracteres char c1, c2, c3;

cout << "Introduzca 3 valores de tipo caracter: ";cin >> c1 >> c2 >> c3;cout << "El valor maximo de los tres es: " << maximo(c1, c2, c3) << endl; //version con caractesreturn 0;

}

Page 56: M.C. Yalu Galicia Hdez. (FCC/BUAP)1 Ordenamiento Algoritmos

M.C. Yalu Galicia Hdez. (FCC/BUAP)

56

Salida con tres tipos diferentes

Page 57: M.C. Yalu Galicia Hdez. (FCC/BUAP)1 Ordenamiento Algoritmos

M.C. Yalu Galicia Hdez. (FCC/BUAP)

57

Plantillas de función El uso de plantillas es un mecanismo

que evita que el programador tenga que escribir tres funciones sobrecargadas separadas con los siguientes prototipos: int maximo (int, int, int); double maximo (double, double, double); char maximo (char, char, char);

Las plantillas porporcionan los beneficios de la reutilización del software.

Page 58: M.C. Yalu Galicia Hdez. (FCC/BUAP)1 Ordenamiento Algoritmos

M.C. Yalu Galicia Hdez. (FCC/BUAP)

58

Sobrecarga de funciones de plantilla

Las funciones de plantilla y la sobrecarga están intimamente relacionadas.

Las funciones relacionadas que se generan a partir de una plantilla de función tienen el mismo nombre, por lo que el compilador utiliza la resolución de sobrecarga para llamar a la función adecuada.

La plantilla de función misma puede sobrecargarse de varias formas Podemos proporcionar otras plantillas de función

que especifiquen el mismo nombre de la función, pero diferentes parámetros de función.

Page 59: M.C. Yalu Galicia Hdez. (FCC/BUAP)1 Ordenamiento Algoritmos

M.C. Yalu Galicia Hdez. (FCC/BUAP)

59

Sobrecarga de funciones de plantilla Si se llama a una plantilla con un tipo de

clase definida por el usuario (por ejemplo, la clase fracción, complejo o pex) y si dicha plantilla utiliza operadores como ==, +, <=, *, etc., con objetos de ese tipo de clase, estos operadores deben ser sobrecargados.

El olvido de sobrecargar tales operadores causa errores debido a que el compilador genera llamadas hacia las funciones de operador sobrecargadas adecuadas, a pesar de que esas funciones no estén presentes.

Page 60: M.C. Yalu Galicia Hdez. (FCC/BUAP)1 Ordenamiento Algoritmos

M.C. Yalu Galicia Hdez. (FCC/BUAP)

60

Actividad colaborativaActividad colaborativaActividad:Hacer un programa que realice lo siguiente:

Permita al usuario introducir un conjunto de datos, que puede ser de tipo char, int o double.

Permita al usuario seleccionar el método de ordenamiento a utilizar: método de burbuja, inserción o selección, para ordenar su arreglo.

Imprima en pantalla el arreglo sin ordenar y el arreglo ordenado.

Crear plantillas de función para cada uno de los métodos de ordenamiento.

Cada método debe tener como parámetros el arreglo a ordenar y el número de elementos en el arreglo.

Probar con diferentes tipos de datos los métodos de ordenamiento.

Page 61: M.C. Yalu Galicia Hdez. (FCC/BUAP)1 Ordenamiento Algoritmos

M.C. Yalu Galicia Hdez. (FCC/BUAP)

61

Actividad colaborativaActividad colaborativa Colaborativamente: Trabajen en equipo,

asegurándose de que comprenden todos los algoritmos de ordenamiento y comousar templates.

Criterios para el éxito: Cada integrante del equipo deberá ser capaz de pasar al frente y explicar al grupo los métodos de ordenamiento y templates

Responsabilidad Individual: Cualquier integrante del equipo podrá ser seleccionad@ aleatoriamente para exponer su programa. Su calificación será la del equipo.

Page 62: M.C. Yalu Galicia Hdez. (FCC/BUAP)1 Ordenamiento Algoritmos

M.C. Yalu Galicia Hdez. (FCC/BUAP)

62

Actividad grupal (SOLUCION) Compartiendo la experiencia

Page 63: M.C. Yalu Galicia Hdez. (FCC/BUAP)1 Ordenamiento Algoritmos

M.C. Yalu Galicia Hdez. (FCC/BUAP)

63

Plantillas de Clase Las plantillas de clase favorecen la

reutilización del software, permitiendo que se instancien versiones específicas para un tipo a partir de clases genéricas.

A la plantillas de clase se les llama tipos con parámetros, debido a que requieren se especifiquen uno o mas parámetros de tipo para especificar la manera de personalizar una plantilla de “clase genérica” a fin de formar una clase de plantilla específica.

Page 64: M.C. Yalu Galicia Hdez. (FCC/BUAP)1 Ordenamiento Algoritmos

M.C. Yalu Galicia Hdez. (FCC/BUAP)

64

Plantillas de clase El programador que desea producir una

variedad de clases de plantilla escribe simplemente una definición de plantilla de clase. Cada vez que el programador necesita una

nueva instanciación específica de un tipo, utiliza una notación concisa y simple, y el compilador escribe el código fuente para la clase de plantilla que el programa requiere.

Por ejemplo, una plantilla de clase vector podría convertirse en la base para la creación de muchas clases vector (tales como vector de enteros, de empleados, de alumnos, etc.) que se utilicen en un programa.

Page 65: M.C. Yalu Galicia Hdez. (FCC/BUAP)1 Ordenamiento Algoritmos

M.C. Yalu Galicia Hdez. (FCC/BUAP)

65

Ejemplo de plantillas de clase//ejemplo de plantillas de clase#include <iostream>#include <string>using namespace std;

//definimos una clase Alumno para crear después vectores de alumnos

class Alumno {friend ostream & operator<<(ostream &, const Alumno &);friend istream & operator>>(istream &, Alumno &); public:

//constructoresAlumno () {

matricula = 0; nombre = "vacio"promedio = 0;

}//accesoresstring getNombre() { return nombre; }

Page 66: M.C. Yalu Galicia Hdez. (FCC/BUAP)1 Ordenamiento Algoritmos

M.C. Yalu Galicia Hdez. (FCC/BUAP)

66

Ejemplo de plantillas de clase//sobrecarga de operadores para comparacion

int operator==(Alumno b) { return ((nombre == b.getNombre()) ? 1 : 0); }

int operator<(Alumno b) {return ((nombre < b.getNombre()) ? 1 : 0); }

int operator>(Alumno b) { return ((nombre > b.getNombre()) ? 1 : 0); }

int operator<=(Alumno b) { return ((nombre <= b.getNombre()) ? 1 : 0); }

int operator>=(Alumno b) { return ((nombre >= b.getNombre()) ? 1 : 0); }

private:long matricula; string nombre; //campo clave o llavedouble promedio;

};

Page 67: M.C. Yalu Galicia Hdez. (FCC/BUAP)1 Ordenamiento Algoritmos

M.C. Yalu Galicia Hdez. (FCC/BUAP)

67

Ejemplo de plantillas de clase//sobrecarga del operador de salida para la clase Alumnoostream &operator<<(ostream &output, const Alumno &a) {

output << a.matricula << "\t"<<a.nombre << "\t"<<a.promedio;return output;

}

//sobrecarga del operador de entrada para la clase Alumnoistream &operator>>(istream &input, Alumno &a) {

cout << "Ingrese matricula, nombre del alumno y promedio\n";input >> a.matricula >>a.nombre >>a.promedio;return input;

}

Page 68: M.C. Yalu Galicia Hdez. (FCC/BUAP)1 Ordenamiento Algoritmos

M.C. Yalu Galicia Hdez. (FCC/BUAP)

68

Ejemplo de plantillas de clase//PLANTILLA VECTORtemplate <class T >class Vector {public:

//constructoresVector(int t); //tamaño predefinido del vector 10~Vector() { delete [] apVec; }//Metodos de ordenamientovoid Seleccion();void Mostrar();

void Agrega(T x);private: int posicion;

int tamano;T *apVec; //apuntador al primer elemento del vector;int estaLleno() { return (posicion == tamano);}

};

Page 69: M.C. Yalu Galicia Hdez. (FCC/BUAP)1 Ordenamiento Algoritmos

M.C. Yalu Galicia Hdez. (FCC/BUAP)

69

Ejemplo de plantillas de clase //constructor template < class T> Vector<T>::Vector(int s) { tamano = s>0 ? s : 10;

posicion = 0; apVec = new T[tamano]; //asigna espacio para los

elementos }

template < class T>void Vector<T>:: Agrega(const T dato) {

if (!estaLleno())apVec[posicion++]= dato;

else cout << "Vector lleno \n";}

Page 70: M.C. Yalu Galicia Hdez. (FCC/BUAP)1 Ordenamiento Algoritmos

M.C. Yalu Galicia Hdez. (FCC/BUAP)

70

Ejemplo de plantillas de clasetemplate < class T>void Vector<T>::Seleccion() {

T AUX;int ind;for (int i= 0; i<posicion; i++) {

AUX = apVec[i];ind = i;for (int j= i+1; j<posicion; j++) {

if (apVec[j] < AUX) {AUX = apVec[j];ind = j;

}}apVec[ind]=apVec[i];

apVec[i]=AUX;}

}

Page 71: M.C. Yalu Galicia Hdez. (FCC/BUAP)1 Ordenamiento Algoritmos

M.C. Yalu Galicia Hdez. (FCC/BUAP)

71

Ejemplo de plantillas de clasetemplate < class T>void Vector<T>::Mostrar() {

cout << "Los datos son:\n";for(int i=0; i<posicion; i++)

cout << apVec[i] << endl;}

int main() { Alumno a;

int v1, v2, v3, v4, v5;Vector<Alumno> Alumnos(3); //crea un vector de alumnosVector<int> Numeros(5); //crea un vector de enteros

cin >> a; Alumnos.Agrega(a);cin >> a; Alumnos.Agrega(a);cin >> a; Alumnos.Agrega(a);Alumnos.Mostrar();

Page 72: M.C. Yalu Galicia Hdez. (FCC/BUAP)1 Ordenamiento Algoritmos

M.C. Yalu Galicia Hdez. (FCC/BUAP)

72

Ejemplo de plantillas de clasecout << “Ordenando Alumnos .. \n”;Alumnos.SelectionSort();Alumnos.Mostrar();

cout << "Ingresa 5 numeros: \n";cin >> v1 >> v2 >> v3 >> v4 >> v5;Numeros.Agrega(v1);Numeros.Agrega(v2);Numeros.Agrega(v3);Numeros.Agrega(v4);Numeros.Agrega(v5);Numeros.Mostrar();cout << “Ordenando numeros ... \n”;Numeros.SelectionSort();Numeros.Mostrar();return 0;

}

Page 73: M.C. Yalu Galicia Hdez. (FCC/BUAP)1 Ordenamiento Algoritmos

M.C. Yalu Galicia Hdez. (FCC/BUAP)

73

Salida ejemplo

Page 74: M.C. Yalu Galicia Hdez. (FCC/BUAP)1 Ordenamiento Algoritmos

M.C. Yalu Galicia Hdez. (FCC/BUAP)

74

Salida ejemplo

Page 75: M.C. Yalu Galicia Hdez. (FCC/BUAP)1 Ordenamiento Algoritmos

M.C. Yalu Galicia Hdez. (FCC/BUAP)

75

¿Que aprendimos?