SlideShare a Scribd company logo
1 of 146
Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 1
31/10/2021
Recursividad,
ordenamiento y
búsqueda de datos
Unidad 2
Material docente compilado por el profesor Ph.D. Franklin Parrales Bravo
para uso de los cursos de Estructuras de Datos
Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 2
31/10/2021
Objetivo general de la Unidad 2
Implementar rutinas recursivas y algoritmos de búsqueda /
ordenamiento de datos con objetos para la elaboración de
programas
Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 3
31/10/2021
Contenido
• Algoritmos recursivos
– Recursión vs iteración
– Métodos recursivos
• Algoritmos de ordenamiento de datos
– Ordenación por BubleSort
– Ordenación por selección
– Ordenación por inserción
– Ordenación QuickSort
– Ordenamiento de objetos
• Algoritmos de búsqueda de datos.
– Búsqueda secuencial
– Búsqueda binaria
Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 4
31/10/2021
Recursión
• La estrategia a seguir es la delegación de
tareas.
• Es decir que un problema grande se
subdivide en pequeñas tareas, y éstas se
delegan.
• Implica llamar al mismo procedimiento
varias veces.
Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 5
31/10/2021
La Función Factorial
• La propiedad primordial del factorial es
que está relacionada a su anterior valor
n!=n*(n-1)!
static long factorial (int n){
long fact;
fact = 1;
for(int i = 1; i <=n; i++)
fact = fact * i;
return (fact);
}
Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 6
31/10/2021
La Función Factorial
• La función factorial se define como:
n! = 1 si n=0
n*(n-1)! En otro caso
• Dicha definición es recursiva, porque n! está en
términos de (n-1)!, lo cual tiene la misma forma
del original.
• La implementación de la función en Java usando
recursión sería: static long factorial (int n){
if (n <= 1)
return 1;
else {
long resultado = n * factorial(n - 1);
return resultado;
}
}
Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 7
31/10/2021
Manejo Interno de la Recursión
• En el proceso de encontrar la respuesta,
el computador va hacia los procesos
internos, que son las llamadas al mismo
procedimiento una y otra vez.
• Supongamos que se quiere evaluar
fact= Factorial(4);
• En el programa principal se hace la
primera llamada a la función.
Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 8
31/10/2021
Primera llamada
main
Factorial
4
n if(n==0){
return(1);
} else{
return(n*Factorial(n-1));
}
?
La función llama a Factorial(n-1), y tan pronto
ésta regrese, se ejecuta la operación indicada
Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 9
31/10/2021
Segunda llamada
main
Factorial
3
n if(n==0){
return(1);
} else{
return(n*Factorial(n-1));
}
?
Factorial
Igualmente al anterior caso, aquí se hace otro
llamado interno a la función, y la operación no se
realiza hasta que se retorne dicho valor
Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 10
31/10/2021
Tercera llamada
main
Factorial
2
n if(n==0){
return(1);
} else{
return(n*Factorial(n-1));
}
?
Factorial
Siguiendo la lógica, se llama a Factorial(1), y éste a su vez
llama a Factorial(0), realizándose dos llamadas más a la
función
Factorial
Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 11
31/10/2021
Última llamada
Factorial
0
n if(n==0){
return(1);
} else{
return(n*Factorial(n-1));
}
Factorial
Factorial
main
Factorial
Factorial
En este punto, la situación
varía, como n es 0, la función
retorna su resultado
inmediatamente
return(1);
Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 12
31/10/2021
Retorno
Factorial
1
n if(n==0){
return(1);
} else{
return(n*Factorial(n-1));
}
Factorial
Factorial
Factorial
main
1
Desde este punto, se devuelve el retorno a cada
llamada recursiva
return(1*1);
Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 13
31/10/2021
Retorno
main
Factorial
2
n if(n==0){
return(1);
} else{
return(n*Factorial(n-1));
}
1
Factorial
Factorial
return(2*1);
Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 14
31/10/2021
Retorno
Factorial
3
n if(n==0){
return(1);
} else{
return(n*Factorial(n-1));
}
2
Factorial
main
return(3*2);
Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 15
31/10/2021
Retorno
main
Factorial
4
n if(n==0){
return(1);
} else{
return(n*Factorial(n-1));
}
6
return(4*6);
Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 16
31/10/2021
El Paradigma Recursivo
• Toda función recursiva tiene la siguiente
estructura:
if(Prueba para el caso simple){
return(solución simple sin usar recursión);
} else{
return(solución recursiva llamando a la misma función);
}
Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 17
31/10/2021
Contenido
• Algoritmos recursivos
– Recursión vs iteración
– Métodos recursivos
• Algoritmos de ordenamiento de datos
– Ordenación por BubleSort
– Ordenación por selección
– Ordenación por inserción
– Ordenación QuickSort
– Ordenamiento de objetos
• Algoritmos de búsqueda de datos.
– Búsqueda secuencial
– Búsqueda binaria
Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 18
31/10/2021
Recursión vs iteración
• La recursividad (recursión) es aquella propiedad
que posee un método por la cual puede llamarse
a sí mismo.
• Normalmente, es menos eficiente en términos de
tiempo de computadora que una solución iterativa,
debido a las operaciones auxiliares que llevan
consigo las invocaciones suplementarias a los
métodos
• Sin embargo, en muchas circunstancias, el uso de
la recursión permite a los programadores
especificar soluciones naturales, sencillas, que
serían, en caso contrario, difíciles de resolver
Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 19
31/10/2021
Ejemplo
• Dado un número natural n, obtener la
suma de los dígitos de que consta.
Presentar un algoritmo recursivo y otro
iterativo
• Se asume que el número es natural y que,
por tanto, no tiene signo. La suma de los
dígitos se puede expresar:
suma = suma(n/10) + modulo (n,10) para n > 9
suma = n para n ≤ 9, caso base
El caso base, el que se resuelve directamente, es n ≤ 9 y, a su vez, es la
condición de parada
Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 20
31/10/2021
Solución recursiva
int sumaRecursiva(int n) {
if (n <= 9)
return n;
else
return sumaRecursiva(n/10) + n%10;
}
Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 21
31/10/2021
Solución iterativa
• La solución iterativa se construye con un
bucle mientras, repitiendo la acumulación
del resto de dividir n por 10 y actualizando
n en el cociente.
• La condición de
salida del bucle es
que n sea menor o
igual que 9
int sumaIterativa(int n){
int suma = 0;
while (n > 9){
suma += n%10;
n /= 10;
}
return (suma+n);
}
Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 22
31/10/2021
Contenido
• Algoritmos recursivos
– Recursión vs iteración
– Métodos recursivos
• Algoritmos de ordenamiento de datos
– Ordenación por BubleSort
– Ordenación por selección
– Ordenación por inserción
– Ordenación QuickSort
– Ordenamiento de objetos
• Algoritmos de búsqueda de datos.
– Búsqueda secuencial
– Búsqueda binaria
Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 23
31/10/2021
Métodos recursivos
• Un método recursivo es un método que se
invoca a sí mismo de forma directa o
indirecta.
– En recursión directa, el código del método f()
contiene una sentencia que invoca a f()
– En recursión indirecta, el método f() invoca a un
método g() que a su vez invoca al método p(), y
así sucesivamente hasta que se invoca de nuevo
al método f()
• Para que sea correcto, debe existir una
“forma de salir” de la secuencia de llamadas
recursivas
Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 24
31/10/2021
Contenido
• Algoritmos recursivos
– Recursión vs iteración
– Métodos recursivos
• Algoritmos de ordenamiento de datos
– Ordenación por BubleSort
– Ordenación por selección
– Ordenación por inserción
– Ordenación QuickSort
– Ordenamiento de objetos
• Algoritmos de búsqueda de datos.
– Búsqueda secuencial
– Búsqueda binaria
Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 25
31/10/2021
Introducción
• Tres operaciones muy importantes en programación:
– ORDENACIÓN
– BÚSQUEDA
– MEZCLA
• La Ordenación consiste en
– Disponer un conjunto de datos en algún determinado orden con
respecto a uno de los campos del conjunto
– Una colección de datos puede ser almacenada en
• Un array
• Un archivo
• Un array de registros
• Una lista enlazada o un arbol
Ordenación
externa
Ordenación
interna
Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 26
31/10/2021
Introducción
• El problema del ordenamiento puede
establecerse mediante la siguiente acción:
– Dados los elementos:
– Ordenar consiste en permutar esos
elementos en un orden tal que
dada una función de ordenamiento f:
n
k
k
k a
a
a ,
,
, 2
1

)
(
)
(
)
( 2
1 n
k
k
k a
f
a
f
a
f 

 
n
a
a
a ,
,
, 2
1 
Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 27
31/10/2021
Introducción
• Normalmente, la función de ordenamiento no es
evaluada de acuerdo a una regla de computación
determinada, pero se guarda como un componente
explícito (campo) de cada item (elemento). El valor
de ese campo se llama la llave del item.
• Un método de ordenamiento es estable si el orden
relativo de elementos con igual llave permanece
inalterado por el proceso de ordenamiento.
• Se entiende que los métodos de ordenamiento
buscan un uso eficiente de la memoria por lo que las
permutaciones de elementos se hará in situ, es decir,
usando el mismo contenedor original.
Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 28
31/10/2021
Introducción
• En lo que sigue se considera que la
estructura lineal (array, lista, vector o
secuencia) a ordenar se representa por un
array de objetos (números enteros):
int a[ ] = new int[MAX];
• siendo MAX el número máximo de
elementos del array. El orden de los
elementos después de la ordenación se
considera ascendente.
Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 29
31/10/2021
Métodos
• Son numerosos
• Se miden de acuerdo a la eficiencia
– Se toman en cuenta dos criterios
• Tiempo menor de ejecución
• Menor número de instrucciones
• Hay dos grupos de métodos
– Directos
• Burbuja, Selección, Inserción
– Indirectos
• Shell, quicksort, mergesort, etc.
Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 30
31/10/2021
Contenido
• Algoritmos recursivos
– Recursión vs iteración
– Métodos recursivos
• Algoritmos de ordenamiento de datos
– Ordenación por BubleSort
– Ordenación por selección
– Ordenación por inserción
– Ordenación QuickSort
– Ordenamiento de objetos
• Algoritmos de búsqueda de datos.
– Búsqueda secuencial
– Búsqueda binaria
Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 31
31/10/2021
Algoritmo burbuja
• Es un método caracterizado por la
comparación e intercambio de pares de
elementos hasta que todos los elementos
estén ordenados.
• En cada iteración se coloca el elemento
más pequeño (orden ascendente) en su
lugar correcto, cambiándose además la
posición de los demás elementos del
array.
Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 32
31/10/2021
Burbuja (Bubble)
• Este método realiza comparaciones de
todas las posibles parejas de llaves
intercambiando aquellas que se encuentran
fuera de orden.
• Utiliza un proceso repetitivo comparando
las parejas de datos adyacentes del inicio
al final del arreglo donde, después de la
primer pasada la llave mayor queda en la
última posición del arreglo.
Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 33
31/10/2021
Burbuja (Bubble)
Variables
• n es el total de elementos
• K arreglo de llaves
• t variable auxiliar para el intercambio
• i,j variables para los indices
Burbuja
Inicio
para i= n-1 ; i>0 ; i--
para j=0; i>j; j++
si (k[j] > k[j+1])
t = k[j];
k[j]= k[j+1];
k[j+1] = t;
Fin
3 8 2 1 4
0 1 2 3 4 5
2
K
3 8 2 1 4 2
3 2 8 1 4 2
3 2 1 8 4 2
3 2 1 4 8 2
3 2 1 4 2 8
Primera
pasada
Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 34
31/10/2021
3 2 1 4 2 8
2 3 1 4 2 8
2 1 3 4 2 8
2 1 3 4 2 8
2 1 3 2 4 8
Segunda
pasada
2 1 3 2 4 8
1 2 3 2 4 8
1 2 3 2 4 8
1 2 2 3 4 8
Tercer
pasada
1 2 2 3 4 8
1 2 2 3 4 8
1 2 2 3 4 8
Cuarta
pasada
1 2 2 3 4 8
1 2 2 3 4 8
Quinta
pasada
Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 35
31/10/2021
Ejemplo y análisis
• Es un algoritmo sencillo pero poco eficiente
– En la primera revisión, se efectúan n-1
comparaciones
– En la segunda, n-2…. y en la ultima, 1
comparacion
– En total se efectuaran ½(n2-n) comparaciones
– Es un algoritmo O(n2), es decir, es lento
23
19
45
6
19
23
Comparación No.
Revisión No.
1
1 2 3
6
45
2
6
23
3
6
19
Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 36
31/10/2021
BUBBLESORT-resumen
• Este algoritmo
– Consiste en “revisar” varias veces la lista
– Para una lista de n elementos, se la revisara
n-1 veces
• En cada revisión i
– Se comparan los n-i elementos adyacentes
– Ubicando los mayores al final de la lista
– Y burbujeando los menores hacia el inicio de
la misma
Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 37
31/10/2021
Algoritmo BubleSort
static void bubbleSort(int[] arr) {
int n = arr.length;
int temp = 0;
for(int i=0; i < n; i++){
for(int j=1; j < (n-i); j++){
if(arr[j-1] > arr[j]){
//swap elements
temp = arr[j-1];
arr[j-1] = arr[j];
arr[j] = temp;
}
}
}
}
public static void main(String[] args) {
int arr[] ={3,60,35,2,45,320,5};
System.out.println("Array Before Bubble Sort");
for(int i=0; i < arr.length; i++){
System.out.print(arr[i] + " ");
}
System.out.println();
bubbleSort(arr);
//sorting array elements using bubble sort
System.out.println("Array After Bubble Sort");
for(int i=0; i < arr.length; i++){
System.out.print(arr[i] + " ");
}
}
Ejemplo de uso
Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 38
31/10/2021
Contenido
• Algoritmos recursivos
– Recursión vs iteración
– Métodos recursivos
• Algoritmos de ordenamiento de datos
– Ordenación por BubleSort
– Ordenación por selección
– Ordenación por inserción
– Ordenación QuickSort
– Ordenamiento de objetos
• Algoritmos de búsqueda de datos.
– Búsqueda secuencial
– Búsqueda binaria
Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 39
31/10/2021
Algoritmo de selección
(Selection Sort)
• En éste método, en el i-ésimo paso
seleccionamos el elemento con la llave de
menor valor, entre a[i],…, a[n] y lo
intercambiamos con a[i].
• Como resultado, después de i pasadas, el
i-ésimo elemento menor ocupará a[1],…,
a[i] en el lugar ordenado.
Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 40
31/10/2021
Algoritmo de selección
(Selection Sort)
• En una lista con n elementos, este
algoritmo
– Busca el elemento mayor de la lista ei
– Lo reubica al final, intercambiando ei con en
• Se aplica el mismo algoritmo pero
– Se reduce n en una unidad (n-1)
• Así, hasta que la lista solo contenga 2
elementos
Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 41
31/10/2021
Selection Sort
5 1 3 4 6 2
Comparison
Data Movement
Sorted
Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 42
31/10/2021
Selection Sort
5 1 3 4 6 2
Comparison
Data Movement
Sorted
Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 43
31/10/2021
Selection Sort
5 1 3 4 6 2
Comparison
Data Movement
Sorted
Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 44
31/10/2021
Selection Sort
5 1 3 4 6 2
Comparison
Data Movement
Sorted
Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 45
31/10/2021
Selection Sort
5 1 3 4 6 2
Comparison
Data Movement
Sorted
Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 46
31/10/2021
Selection Sort
5 1 3 4 6 2
Comparison
Data Movement
Sorted
Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 47
31/10/2021
Selection Sort
5 1 3 4 6 2
Comparison
Data Movement
Sorted
Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 48
31/10/2021
Selection Sort
5 1 3 4 6 2
Comparison
Data Movement
Sorted

Largest
Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 49
31/10/2021
Selection Sort
5 1 3 4 2 6
Comparison
Data Movement
Sorted
Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 50
31/10/2021
Selection Sort
5 1 3 4 2 6
Comparison
Data Movement
Sorted
Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 51
31/10/2021
Selection Sort
5 1 3 4 2 6
Comparison
Data Movement
Sorted
Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 52
31/10/2021
Selection Sort
5 1 3 4 2 6
Comparison
Data Movement
Sorted
Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 53
31/10/2021
Selection Sort
5 1 3 4 2 6
Comparison
Data Movement
Sorted
Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 54
31/10/2021
Selection Sort
5 1 3 4 2 6
Comparison
Data Movement
Sorted
Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 55
31/10/2021
Selection Sort
5 1 3 4 2 6
Comparison
Data Movement
Sorted
Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 56
31/10/2021
Selection Sort
5 1 3 4 2 6
Comparison
Data Movement
Sorted

Largest
Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 57
31/10/2021
Selection Sort
2 1 3 4 5 6
Comparison
Data Movement
Sorted
Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 58
31/10/2021
Selection Sort
2 1 3 4 5 6
Comparison
Data Movement
Sorted
Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 59
31/10/2021
Selection Sort
2 1 3 4 5 6
Comparison
Data Movement
Sorted
Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 60
31/10/2021
Selection Sort
2 1 3 4 5 6
Comparison
Data Movement
Sorted
Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 61
31/10/2021
Selection Sort
2 1 3 4 5 6
Comparison
Data Movement
Sorted
Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 62
31/10/2021
Selection Sort
2 1 3 4 5 6
Comparison
Data Movement
Sorted
Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 63
31/10/2021
Selection Sort
2 1 3 4 5 6
Comparison
Data Movement
Sorted

Largest
Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 64
31/10/2021
Selection Sort
2 1 3 4 5 6
Comparison
Data Movement
Sorted
Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 65
31/10/2021
Selection Sort
2 1 3 4 5 6
Comparison
Data Movement
Sorted
Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 66
31/10/2021
Selection Sort
2 1 3 4 5 6
Comparison
Data Movement
Sorted
Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 67
31/10/2021
Selection Sort
2 1 3 4 5 6
Comparison
Data Movement
Sorted
Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 68
31/10/2021
Selection Sort
2 1 3 4 5 6
Comparison
Data Movement
Sorted
Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 69
31/10/2021
Selection Sort
2 1 3 4 5 6
Comparison
Data Movement
Sorted

Largest
Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 70
31/10/2021
Selection Sort
2 1 3 4 5 6
Comparison
Data Movement
Sorted
Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 71
31/10/2021
Selection Sort
2 1 3 4 5 6
Comparison
Data Movement
Sorted
Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 72
31/10/2021
Selection Sort
2 1 3 4 5 6
Comparison
Data Movement
Sorted
Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 73
31/10/2021
Selection Sort
2 1 3 4 5 6
Comparison
Data Movement
Sorted
Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 74
31/10/2021
Selection Sort
2 1 3 4 5 6
Comparison
Data Movement
Sorted

Largest
Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 75
31/10/2021
Selection Sort
1 2 3 4 5 6
Comparison
Data Movement
Sorted
Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 76
31/10/2021
Selection Sort
1 2 3 4 5 6
Comparison
Data Movement
Sorted
DONE!
Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 77
31/10/2021
Algoritmo selección
public static void selectionSort(int[] arr){
for (int i = 0; i < arr.length - 1; i++)
{
int index = i;
for (int j = i + 1; j < arr.length; j++){
if (arr[j] < arr[index]){
index = j;//searching for lowest index
}
}
int smallerNumber = arr[index];
arr[index] = arr[i];
arr[i] = smallerNumber;
}
}
public static void main(String a[]){
int[] arr1 = {9,14,3,2,43,11,58,22};
System.out.println("Before Selection Sort");
for(int i:arr1){
System.out.print(i+" ");
}
System.out.println();
selectionSort(arr1);//sorting array using sele
ction sort
System.out.println("After Selection Sort");
for(int i:arr1){
System.out.print(i+" ");
}
}
Ejemplo de uso
Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 78
31/10/2021
Contenido
• Algoritmos recursivos
– Recursión vs iteración
– Métodos recursivos
• Algoritmos de ordenamiento de datos
– Ordenación por BubleSort
– Ordenación por selección
– Ordenación por inserción
– Ordenación QuickSort
– Ordenamiento de objetos
• Algoritmos de búsqueda de datos.
– Búsqueda secuencial
– Búsqueda binaria
Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 79
31/10/2021
Algoritmo inserción
• Este método es usado por los jugadores de cartas.
Los elementos están divididos conceptualmente en
una secuencia destino y una secuencia fuente .
• En cada paso, comenzando con i=2 e incrementando i
en uno, el elemento i-ésimo de la secuencia fuente se
toma y se transfiere a la secuencia destino
insertándolo en el lugar adecuado.
• En otras palabras, en el i-ésimo paso insertamos el i-
ésimo elemento a[i] en su lugar correcto entre a[1],
a[2],…., a[i-1], que fueron colocados en orden
previamente.
Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 80
31/10/2021
Ordenamiento por inserción directa
Variables
– K arreglo de datos a ordenar
– V variable auxiliar
– i, j índices para el arreglo
– N número de elementos
InserciónDirecta
Inicio
Para i=2 hasta N incremento 1
v = K(i) //elemento a acomodar
j = i
Mientras (j > 1) y (K(j-1) > v)
K(j) = K(j-1) //mueve elementos
j = j-1
K(j) = v // inserta el elemento actual
Fin
3 8 2 1 4
1 2 3 4 5 6
2
K
3 8
2 3 8
1 2 3 8
1 2 3 4 8
1 2 2 3 4 8
Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 81
31/10/2021
Algoritmo inserción
public static void insertionSort(int array[]) {
int n = array.length;
for (int j = 1; j < n; j++) {
int key = array[j];
int i = j-1;
while ( (i > -1) && ( array [i] > key ) ) {
array [i+1] = array [i];
i--;
}
array[i+1] = key;
}
}
public static void main(String a[]){
int[] arr1 = {9,14,3,2,43,11,58,22};
System.out.println("Before Insertion Sort");
for(int i:arr1){
System.out.print(i+" ");
}
System.out.println();
insertionSort(arr1);//sorting array using inser
tion sort
System.out.println("After Insertion Sort");
for(int i:arr1){
System.out.print(i+" ");
}
}
Ejemplo de uso
Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 82
31/10/2021
Contenido
• Algoritmos recursivos
– Recursión vs iteración
– Métodos recursivos
• Algoritmos de ordenamiento de datos
– Ordenación por BubleSort
– Ordenación por selección
– Ordenación por inserción
– Ordenación QuickSort
– Ordenamiento de objetos
• Algoritmos de búsqueda de datos.
– Búsqueda secuencial
– Búsqueda binaria
Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 83
31/10/2021
Quicksort: divide y conquista
• Es el método de ordenación rápida mas veloz
• Pero
– Requiere gran cantidad de memoria para realizarlo
• Consiste en:
– Elija un elemento “pivote” al azar
• Podría ser fijo el elemento de la mitad
– Divida la lista en dos sublistas en base al pivote
– Se deberá ordenar cada sublista, para que
• Los elementos de la sublista izq. Sean menores al pivote
• Los elementos de la sublista der. Sean mayores al pivote
Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 84
31/10/2021
Algoritmo rápido (Quicksort)
• Descripción del algoritmo:
1) Dividir : Si la secuencia S tiene 2 o más elementos,
seleccionar un elemento x de S como pivote. Cualquier
elemento arbitrario, como el último, puede servir. Elimiar los
elementos de S dividiéndolos en 3 secuencias:
L, contiene los elementos de S menores que x
E, contiene los elementos de S iguales a x
G, contiene los elementos de S mayores que x
2) Recursión: De forma recursiva ordenar L y G
3) Vencer: Finalmente, colocar nuevamente los elementos en S
en orden, primero insertar los elementos de L, después E, y
los elementos de G.
Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 85
31/10/2021
El algoritmo
• Escoger el pivote k
– Usualmente el de la mitad
• Ubicar referencias
– i en el primer elemento y j en el ultimo
• Mientras i <= j
– Buscar primer elemento A[i] mayor o igual que A[k]
– Buscar primer elemento A[j] menor o igual que A[k]
– Si i <= j,
• intercambiar A[i] con A[j]
• I avanza y j retrocede un puesto
Aplicar
QuickSort a
cada sublista
Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 86
31/10/2021
Análisis de quicksort
• El mejor de los casos ocurrirá cuando
– La división, en cada recursión,
• Produce dos sublistas de igual longitud
– La profundidad de la recursividad es
• Log(n)
– Y en cada nivel se trataran n elementos
– En este caso, cae en el grupo de n*log(n)
• El peor de los casos es cuando
– La división en cada reexcursión es desbalanceada
– La profundidad de la recursividad es n-1
– Y en ese caso, cae en el grupo n2
Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 87
31/10/2021
Idea de Quick Sort
1) Selección: tomar un elemento
2) Dividir: reordenar los
elementos tal que x va a su
posición final E
3) Recursión y Vencer: ordenar
recursivamente
Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 88
31/10/2021
Quick Sort
5 1 3 8 7 4 6 2
Elements < pivot Elements > pivot
Data Movement
Sorted
Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 89
31/10/2021
Quick Sort
5 1 3 8 7 4 6 2
Elements < pivot Elements > pivot
Data Movement
Sorted

Pivot

First
Unknown
Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 90
31/10/2021
Quick Sort
5 1 3 8 7 4 6 2
Elements < pivot Elements > pivot
Data Movement
Sorted

Pivot

First
Unknown
Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 91
31/10/2021
Quick Sort
5 1 3 8 7 4 6 2
Elements < pivot Elements > pivot
Data Movement
Sorted

Pivot

First
Unknown
Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 92
31/10/2021
Quick Sort
5 1 3 8 7 4 6 2
Elements < pivot Elements > pivot
Data Movement
Sorted

Pivot

First
Unknown
Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 93
31/10/2021
Quick Sort
5 1 3 8 7 4 6 2
Elements < pivot Elements > pivot
Data Movement
Sorted

Pivot

First
Unknown
Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 94
31/10/2021
Quick Sort
5 1 3 8 7 4 6 2
Elements < pivot Elements > pivot
Data Movement
Sorted

Pivot

First
Unknown
Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 95
31/10/2021
Quick Sort
5 1 3 4 7 8 6 2
Elements < pivot Elements > pivot
Data Movement
Sorted

Pivot

First
Unknown
Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 96
31/10/2021
Quick Sort
5 1 3 4 7 8 6 2
Elements < pivot Elements > pivot
Data Movement
Sorted

Pivot

First
Unknown
Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 97
31/10/2021
Quick Sort
5 1 3 4 7 8 6 2
Elements < pivot Elements > pivot
Data Movement
Sorted

Pivot

First
Unknown
Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 98
31/10/2021
Quick Sort
5 1 3 4 7 8 6 2
Elements < pivot Elements > pivot
Data Movement
Sorted

Pivot

First
Unknown
Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 99
31/10/2021
Quick Sort
5 1 3 4 2 8 6 7
Elements < pivot Elements > pivot
Data Movement
Sorted

Pivot

First
Unknown
Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 100
31/10/2021
Quick Sort
5 1 3 4 2 8 6 7
Elements < pivot Elements > pivot
Data Movement
Sorted

Pivot
Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 101
31/10/2021
Quick Sort
2 1 3 4 5 8 6 7
Elements < pivot Elements > pivot
Data Movement
Sorted

Pivot
Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 102
31/10/2021
Quick Sort
2 1 3 4 5 8 6 7
Elements < pivot Elements > pivot
Data Movement
Sorted
Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 103
31/10/2021
Quick Sort
2 1 3 4 5 8 6 7
Elements < pivot Elements > pivot
Data Movement
Sorted

Pivot

First
Unknown
Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 104
31/10/2021
Quick Sort
2 1 3 4 5 8 6 7
Elements < pivot Elements > pivot
Data Movement
Sorted

Pivot

First
Unknown
Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 105
31/10/2021
Quick Sort
2 1 3 4 5 8 6 7
Elements < pivot Elements > pivot
Data Movement
Sorted

Pivot

First
Unknown
Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 106
31/10/2021
Quick Sort
2 1 3 4 5 8 6 7
Elements < pivot Elements > pivot
Data Movement
Sorted

Pivot
Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 107
31/10/2021
Quick Sort
1 2 3 4 5 8 6 7
Elements < pivot Elements > pivot
Data Movement
Sorted

Pivot
Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 108
31/10/2021
Quick Sort
1 2 3 4 5 8 6 7
Elements < pivot Elements > pivot
Data Movement
Sorted
Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 109
31/10/2021
Quick Sort
1 2 3 4 5 8 6 7
Elements < pivot Elements > pivot
Data Movement
Sorted
Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 110
31/10/2021
Quick Sort
1 2 3 4 5 8 6 7
Elements < pivot Elements > pivot
Data Movement
Sorted
Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 111
31/10/2021
Quick Sort
1 2 3 4 5 8 6 7
Elements < pivot Elements > pivot
Data Movement
Sorted

Pivot

First
Unknown
Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 112
31/10/2021
Quick Sort
1 2 3 4 5 8 6 7
Elements < pivot Elements > pivot
Data Movement
Sorted

Pivot
Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 113
31/10/2021
Quick Sort
1 2 3 4 5 8 6 7
Elements < pivot Elements > pivot
Data Movement
Sorted

Pivot
Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 114
31/10/2021
Quick Sort
1 2 3 4 5 8 6 7
Elements < pivot Elements > pivot
Data Movement
Sorted
Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 115
31/10/2021
Quick Sort
1 2 3 4 5 8 6 7
Elements < pivot Elements > pivot
Data Movement
Sorted
Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 116
31/10/2021
Quick Sort
1 2 3 4 5 8 6 7
Elements < pivot Elements > pivot
Data Movement
Sorted
Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 117
31/10/2021
Quick Sort
1 2 3 4 5 8 6 7
Elements < pivot Elements > pivot
Data Movement
Sorted

Pivot

First
Unknown
Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 118
31/10/2021
Quick Sort
1 2 3 4 5 8 6 7
Elements < pivot Elements > pivot
Data Movement
Sorted

Pivot

First
Unknown
Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 119
31/10/2021
Quick Sort
1 2 3 4 5 8 6 7
Elements < pivot Elements > pivot
Data Movement
Sorted

Pivot
Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 120
31/10/2021
Quick Sort
1 2 3 4 5 7 6 8
Elements < pivot Elements > pivot
Data Movement
Sorted

Pivot
Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 121
31/10/2021
Quick Sort
1 2 3 4 5 7 6 8
Elements < pivot Elements > pivot
Data Movement
Sorted
Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 122
31/10/2021
Quick Sort
1 2 3 4 5 7 6 8
Elements < pivot Elements > pivot
Data Movement
Sorted
Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 123
31/10/2021
Quick Sort
1 2 3 4 5 7 6 8
Elements < pivot Elements > pivot
Data Movement
Sorted

Pivot

First
Unknown
Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 124
31/10/2021
Quick Sort
1 2 3 4 5 7 6 8
Elements < pivot Elements > pivot
Data Movement
Sorted

Pivot
Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 125
31/10/2021
Quick Sort
1 2 3 4 5 6 7 8
Elements < pivot Elements > pivot
Data Movement
Sorted

Pivot
Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 126
31/10/2021
Quick Sort
1 2 3 4 5 6 7 8
Elements < pivot Elements > pivot
Data Movement
Sorted
Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 127
31/10/2021
Quick Sort
1 2 3 4 5 6 7 8
Elements < pivot Elements > pivot
Data Movement
Sorted
Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 128
31/10/2021
Quick Sort
1 2 3 4 5 6 7 8
Elements < pivot Elements > pivot
Data Movement
Sorted
DONE!
Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 129
31/10/2021
Algoritmo Quicksort
public static void quicksort(int A[], int izq, int der) {
int pivote=A[izq]; // tomamos primer elemento como pivote
int i=izq; // i realiza la búsqueda de izquierda a derecha
int j=der; // j realiza la búsqueda de derecha a izquierda
int aux;
while(i < j){ // mientras no se crucen las búsquedas
while(A[i] <= pivote && i < j) i++; // busca elemento mayor que pivote
while(A[j] > pivote) j--; // busca elemento menor que pivote
if (i < j) { // si no se han cruzado
aux= A[i]; // los intercambia
A[i]=A[j]; A[j]=aux;
}
}
A[izq]=A[j]; // se coloca el pivote en su lugar de forma que tendremos
A[j]=pivote; // los menores a su izquierda y los mayores a su derecha
if(izq < j-1) quicksort(A,izq,j-1); // ordenamos subarray izquierdo
if(j+1 < der) quicksort(A,j+1,der); // ordenamos subarray derecho
}
Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 130
31/10/2021
De forma gráfica el proceso sería el
siguiente:
Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 131
31/10/2021
Contenido
• Algoritmos recursivos
– Recursión vs iteración
– Métodos recursivos
• Algoritmos de ordenamiento de datos
– Ordenación por BubleSort
– Ordenación por selección
– Ordenación por inserción
– Ordenación QuickSort
– Ordenamiento de objetos
• Algoritmos de búsqueda de datos.
– Búsqueda secuencial
– Búsqueda binaria
Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 132
31/10/2021
Ordenamiento de objetos
• Los diversos algoritmos que se han estudiado en los
apartados anteriores siempre han ordenado arrays de
un tipo de dato simple: int, double, ...
• La clase Vector de Java está diseñada para
almacenar objetos de cualquier tipo. En el Ejemplo se
almacenan objetos de clases diferentes.
class Racional {
private int numerador, denominador;
public Racional() {
numerado = 0;
denominador = 1;
}
public Racional(int n, int d)throws Exception {
super();
numerado = n;
if (d == 0) throw new Exception(" Denominador == 0");
denominador = d; }
...
}
for (int i = 0; i < 10; i++)
v.addElement(new Racional(5*i%7, 3*i+1));
Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 133
31/10/2021
Ordenamiento de objetos
• ¿Cómo comparar objetos? ¿Qué criterio seguir para
determinar que el objeto p1 es menor que el objeto p2 ?
• Una alternativa consiste en declarar un interface con los
métodos menorQue(),menorIgualQue() …, y que las
clases de los objetos que se ordenan implementen el
interface.
interface Comparador {
boolean igualQue(Object op2);
boolean menorQue(Object op2);
boolean menorIgualQue(Object op2);
boolean mayorQue(Object op2);
boolean mayorIgualQue(Object op2);
}
Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 134
31/10/2021
Ordenamiento de objetos
class Racional implements Comparador {
private int numerador, denominador;
public boolean igualQue(Object op2) {
Racional n2 = (Racional) op2;
return ((double)numerador / (double)denominador) ==
((double)n2.numerador / (double)n2.denominador );
}
public boolean menorQue(Object op2) {
Racional n2 = (Racional) op2;
return ((double)numerador / (double)denominador) <
((double)n2.numerador / (double)n2.denominador );
}
public boolean menorIgualQue(Object op2) {
Racional n2 = (Racional) op2;
return ((double)numerador / (double)denominador) <=
((double)n2.numerador / (double)n2.denominador );
}
public boolean mayorQue(Object op2) {
Racional n2 = (Racional) op2; return ((double)numerador / (double)denominador) >
((double)n2.numerador / (double)n2.denominador );
}
public boolean mayorIgualQue(Object op2) {
Racional n2 = (Racional) op2;
return ((double)numerador / (double)denominador) >=
(double)n2.numerador / (double)n2.denominador );
}
}
Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 135
31/10/2021
Ordenamiento de objetos
• Una vez establecidas las condiciones para realizar la
ordenación, falta por elegir alguno de los algoritmos de
ordenación.
• Debido a su sencillez, se emplea el algoritmo de la burbuja
(BubleSort)
public static void ordVector (Vector v) {
boolean interruptor = true;
int pasada, j;
int n = v.size();
// bucle externo controla la cantidad de pasadas
for (pasada = 0; pasada < n-1 && interruptor; pasada++) {
interruptor = false;
for (j = 0; j < n-pasada-1; j++) {
Racional r;
r = (Racional)v.elementAt(j);
if (r.mayorQue(v.elementAt(j+1))) {
// elementos desordenados, se intercambian
interruptor = true;
intercambiar(v, j, j+1);
}
}
}
}
Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 136
31/10/2021
Ordenamiento de objetos
private static void intercambiar (Vector v, int i, int j)
{
Object aux = v.elementAt(i);
v.setElementAt(v.elementAt(j), i);
v.setElementAt(aux, j);
}
Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 137
31/10/2021
Contenido
• Algoritmos recursivos
– Recursión vs iteración
– Métodos recursivos
• Algoritmos de ordenamiento de datos
– Ordenación por BubleSort
– Ordenación por selección
– Ordenación por inserción
– Ordenación QuickSort
– Ordenamiento de objetos
• Algoritmos de búsqueda de datos.
– Búsqueda secuencial
– Búsqueda binaria
Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 138
31/10/2021
Introducción
• Se trata de hallar un elemento de dato a
través de una valor llave. Existen dos
grupos de métodos de búsqueda:
– Métodos simples:
• Búsqueda lineal sobre un array
• Búsqueda lineal sobre una lista enlazada
• Búsqueda lineal sobre un array ordenado
• Búsqueda lineal sobre una lista enlazada
ordenada
Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 139
31/10/2021
Introducción
– Métodos avanzados:
• Búsqueda binaria sobre un array ordenado
• Búsqueda por interpolación sobre un array
ordenado
• Búsqueda por interpolación sobre un array
ordenado
• Búsqueda binaria sobre un árbol binario de
búsqueda
• Búsqueda usando estrategia hash
Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 140
31/10/2021
Contenido
• Algoritmos recursivos
– Recursión vs iteración
– Métodos recursivos
• Algoritmos de ordenamiento de datos
– Ordenación por BubleSort
– Ordenación por selección
– Ordenación por inserción
– Ordenación QuickSort
– Ordenamiento de objetos
• Algoritmos de búsqueda de datos.
– Búsqueda secuencial
– Búsqueda binaria
Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 141
31/10/2021
Búsqueda Secuencial
Consiste en ir comparando el elemento que se
busca con cada elemento del arreglo hasta
que se encuentra.
I N F O M Á T I C A
M M M M M
0 1 2 3 4 5 6 7 8 9
Índice resultado = 4
Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 142
31/10/2021
Algoritmo Búsqueda Secuencial
for (i=0; i < LARGO; i++)
if (a[i]==Elemento_buscado)
printf(“Elemento encontrado en: %dn”, i);
Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 143
31/10/2021
Contenido
• Algoritmos recursivos
– Recursión vs iteración
– Métodos recursivos
• Algoritmos de ordenamiento de datos
– Ordenación por BubleSort
– Ordenación por selección
– Ordenación por inserción
– Ordenación QuickSort
– Ordenamiento de objetos
• Algoritmos de búsqueda de datos.
– Búsqueda secuencial
– Búsqueda binaria
Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 144
31/10/2021
Búsqueda Binaria
Los elementos del arreglo se encuentran ordenados y no están
repetidos. En cada iteración el dominio de búsqueda se divide
en 2.
3 5 8 20 32 45 60 73
32 32
0 1 2 3 4 5 6 7
Resultado = 4
32
Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 145
31/10/2021
Algoritmo Búsqueda Binaria
tipo A[LARGO]
Max=LARGO-1;
min=0;
Encontrado=0;
while(min+1<max && !Encontrado){
Medio=(Max+min)/2
if (A[Medio]==Elemento){
printf(“Elemento Encontradon”);
Encontrado=1; /*Fuerza la salida del ciclo*/
}
if (A[Medio]<Elemento) Max=Medio;
if (A[Medio]>Elemento) min=Medio;
}
Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 146
31/10/2021
Recursividad,
ordenamiento y
búsqueda de datos
Unidad 2
Final de la unidad

More Related Content

What's hot

Desnormalizacion bases datos 2
Desnormalizacion bases datos 2Desnormalizacion bases datos 2
Desnormalizacion bases datos 2Velmuz Buzz
 
Estructuras de datos y tipos de datos abstractos
Estructuras de datos y tipos de datos abstractosEstructuras de datos y tipos de datos abstractos
Estructuras de datos y tipos de datos abstractosLuis Lastra Cid
 
Tipos abstractos de datos
Tipos abstractos de datosTipos abstractos de datos
Tipos abstractos de datosJose Armando
 
Presentación1
Presentación1Presentación1
Presentación1cipq
 
Importancia de la implementación de las listas para la estructura de datos
Importancia de la implementación de las listas para la estructura de datosImportancia de la implementación de las listas para la estructura de datos
Importancia de la implementación de las listas para la estructura de datospepelebu1313
 
Unidad 2. modelo entidad relacion
Unidad 2. modelo entidad relacionUnidad 2. modelo entidad relacion
Unidad 2. modelo entidad relacionLuiS YmAY
 
Metodos De Ordenamiento
Metodos De OrdenamientoMetodos De Ordenamiento
Metodos De Ordenamientolichic
 
Archivos secuenciales-indexados C++
Archivos secuenciales-indexados C++Archivos secuenciales-indexados C++
Archivos secuenciales-indexados C++EdsonRc
 
Queue as data_structure
Queue as data_structureQueue as data_structure
Queue as data_structureeShikshak
 

What's hot (20)

Ordenamiento por insercion
Ordenamiento por insercionOrdenamiento por insercion
Ordenamiento por insercion
 
Desnormalizacion bases datos 2
Desnormalizacion bases datos 2Desnormalizacion bases datos 2
Desnormalizacion bases datos 2
 
Estructuras de datos y tipos de datos abstractos
Estructuras de datos y tipos de datos abstractosEstructuras de datos y tipos de datos abstractos
Estructuras de datos y tipos de datos abstractos
 
Busqueda Binaria
Busqueda BinariaBusqueda Binaria
Busqueda Binaria
 
Tipos abstractos de datos
Tipos abstractos de datosTipos abstractos de datos
Tipos abstractos de datos
 
Presentación1
Presentación1Presentación1
Presentación1
 
La instrucción tsl
La instrucción tslLa instrucción tsl
La instrucción tsl
 
Lista, pilas y colas
Lista, pilas y colasLista, pilas y colas
Lista, pilas y colas
 
Importancia de la implementación de las listas para la estructura de datos
Importancia de la implementación de las listas para la estructura de datosImportancia de la implementación de las listas para la estructura de datos
Importancia de la implementación de las listas para la estructura de datos
 
Unidad 2. modelo entidad relacion
Unidad 2. modelo entidad relacionUnidad 2. modelo entidad relacion
Unidad 2. modelo entidad relacion
 
Arboles Binarios
Arboles BinariosArboles Binarios
Arboles Binarios
 
Estructura de datos - Unidad 2: Recursividad
Estructura de datos - Unidad 2: Recursividad Estructura de datos - Unidad 2: Recursividad
Estructura de datos - Unidad 2: Recursividad
 
Algoritmos de Ordenamiento externo
Algoritmos de Ordenamiento externoAlgoritmos de Ordenamiento externo
Algoritmos de Ordenamiento externo
 
Metodos De Ordenamiento
Metodos De OrdenamientoMetodos De Ordenamiento
Metodos De Ordenamiento
 
Archivos secuenciales-indexados C++
Archivos secuenciales-indexados C++Archivos secuenciales-indexados C++
Archivos secuenciales-indexados C++
 
Recursividad
RecursividadRecursividad
Recursividad
 
Queue as data_structure
Queue as data_structureQueue as data_structure
Queue as data_structure
 
Quick sort
Quick sortQuick sort
Quick sort
 
Insertion Sort
Insertion SortInsertion Sort
Insertion Sort
 
Estructura datos pilas y colas
Estructura datos pilas y colasEstructura datos pilas y colas
Estructura datos pilas y colas
 

Similar to ED Unidad 2: Recursividad, ordenamiento y búsqueda de datos

Ordenacion y busqueda
Ordenacion y busquedaOrdenacion y busqueda
Ordenacion y busquedaIrvingMoran4
 
ALP Unidad 3: Tipos de datos estructurados y punteros
ALP Unidad 3: Tipos de datos estructurados y punterosALP Unidad 3: Tipos de datos estructurados y punteros
ALP Unidad 3: Tipos de datos estructurados y punterosFranklin Parrales Bravo
 
Unidad 1 1
Unidad 1   1Unidad 1   1
Unidad 1 1VivianaG
 
Algorismos de ordenacion y busqueda
Algorismos de ordenacion  y busquedaAlgorismos de ordenacion  y busqueda
Algorismos de ordenacion y busquedabbrti
 
Ordenación y búsqueda orientada a C++
Ordenación y búsqueda orientada a C++Ordenación y búsqueda orientada a C++
Ordenación y búsqueda orientada a C++Carlos Ureña
 
Recursividad, Ordenacion y Busqueda
Recursividad, Ordenacion y BusquedaRecursividad, Ordenacion y Busqueda
Recursividad, Ordenacion y BusquedaEuniceLeguiasGonzale
 
MOD Unidad 3: Modelado y verificación formal
MOD Unidad 3: Modelado y verificación formalMOD Unidad 3: Modelado y verificación formal
MOD Unidad 3: Modelado y verificación formalFranklin Parrales Bravo
 
metodos-de-ordenamiento.pdf
metodos-de-ordenamiento.pdfmetodos-de-ordenamiento.pdf
metodos-de-ordenamiento.pdfjorgeulises3
 
Database Fundamentals - Sesión 1 - SQL Server
Database Fundamentals - Sesión 1 - SQL ServerDatabase Fundamentals - Sesión 1 - SQL Server
Database Fundamentals - Sesión 1 - SQL ServerJulián Castiblanco
 
Investigacion ed (pseudocodigo, algoritmo, listas, colas, arboles)
Investigacion ed (pseudocodigo, algoritmo, listas, colas, arboles)Investigacion ed (pseudocodigo, algoritmo, listas, colas, arboles)
Investigacion ed (pseudocodigo, algoritmo, listas, colas, arboles)Eli Diaz
 
METODOS DE ORDENACION ORDENAMIENTO Y BUSQUEDA (ALGORITMOS)
METODOS DE ORDENACION ORDENAMIENTO Y BUSQUEDA (ALGORITMOS)METODOS DE ORDENACION ORDENAMIENTO Y BUSQUEDA (ALGORITMOS)
METODOS DE ORDENACION ORDENAMIENTO Y BUSQUEDA (ALGORITMOS)Fuerza Auriazul
 
02 uni1-estructuras de datos-arreglos
02 uni1-estructuras de datos-arreglos02 uni1-estructuras de datos-arreglos
02 uni1-estructuras de datos-arreglosFranco Guamán
 

Similar to ED Unidad 2: Recursividad, ordenamiento y búsqueda de datos (20)

Ordenacion y busqueda
Ordenacion y busquedaOrdenacion y busqueda
Ordenacion y busqueda
 
Unidad 1.pdf
Unidad 1.pdfUnidad 1.pdf
Unidad 1.pdf
 
Tema5
Tema5Tema5
Tema5
 
ALP Unidad 3: Tipos de datos estructurados y punteros
ALP Unidad 3: Tipos de datos estructurados y punterosALP Unidad 3: Tipos de datos estructurados y punteros
ALP Unidad 3: Tipos de datos estructurados y punteros
 
Unidad 1 1
Unidad 1   1Unidad 1   1
Unidad 1 1
 
Busqueda
BusquedaBusqueda
Busqueda
 
Algorismos de ordenacion y busqueda
Algorismos de ordenacion  y busquedaAlgorismos de ordenacion  y busqueda
Algorismos de ordenacion y busqueda
 
Ordenación y búsqueda orientada a C++
Ordenación y búsqueda orientada a C++Ordenación y búsqueda orientada a C++
Ordenación y búsqueda orientada a C++
 
Recursividad, Ordenacion y Busqueda
Recursividad, Ordenacion y BusquedaRecursividad, Ordenacion y Busqueda
Recursividad, Ordenacion y Busqueda
 
MOD Unidad 3: Modelado y verificación formal
MOD Unidad 3: Modelado y verificación formalMOD Unidad 3: Modelado y verificación formal
MOD Unidad 3: Modelado y verificación formal
 
Unidad 5
Unidad 5Unidad 5
Unidad 5
 
metodos-de-ordenamiento.pdf
metodos-de-ordenamiento.pdfmetodos-de-ordenamiento.pdf
metodos-de-ordenamiento.pdf
 
Sql3
Sql3Sql3
Sql3
 
Estructura de Datos - Unidad II Recursividad
Estructura de Datos - Unidad II RecursividadEstructura de Datos - Unidad II Recursividad
Estructura de Datos - Unidad II Recursividad
 
Database Fundamentals - Sesión 1 - SQL Server
Database Fundamentals - Sesión 1 - SQL ServerDatabase Fundamentals - Sesión 1 - SQL Server
Database Fundamentals - Sesión 1 - SQL Server
 
Investigacion ed (pseudocodigo, algoritmo, listas, colas, arboles)
Investigacion ed (pseudocodigo, algoritmo, listas, colas, arboles)Investigacion ed (pseudocodigo, algoritmo, listas, colas, arboles)
Investigacion ed (pseudocodigo, algoritmo, listas, colas, arboles)
 
METODOS DE ORDENACION ORDENAMIENTO Y BUSQUEDA (ALGORITMOS)
METODOS DE ORDENACION ORDENAMIENTO Y BUSQUEDA (ALGORITMOS)METODOS DE ORDENACION ORDENAMIENTO Y BUSQUEDA (ALGORITMOS)
METODOS DE ORDENACION ORDENAMIENTO Y BUSQUEDA (ALGORITMOS)
 
02 uni1-estructuras de datos-arreglos
02 uni1-estructuras de datos-arreglos02 uni1-estructuras de datos-arreglos
02 uni1-estructuras de datos-arreglos
 
Unidad 6
Unidad 6Unidad 6
Unidad 6
 
Ordenacion
OrdenacionOrdenacion
Ordenacion
 

More from Franklin Parrales Bravo

Presentacion del congreso ETCM del 2021 en Cuenca
Presentacion del congreso ETCM del 2021 en CuencaPresentacion del congreso ETCM del 2021 en Cuenca
Presentacion del congreso ETCM del 2021 en CuencaFranklin Parrales Bravo
 
IW Unidad 1: Introducción a la Ingeniería Web
IW Unidad 1: Introducción a la Ingeniería WebIW Unidad 1: Introducción a la Ingeniería Web
IW Unidad 1: Introducción a la Ingeniería WebFranklin Parrales Bravo
 
IW Unidad 4: Web accesible, semántica y ubicua
IW Unidad 4: Web accesible, semántica y ubicuaIW Unidad 4: Web accesible, semántica y ubicua
IW Unidad 4: Web accesible, semántica y ubicuaFranklin Parrales Bravo
 
IW Unidad 3: Ingeniería Web dirigida por modelos
IW Unidad 3: Ingeniería Web dirigida por modelosIW Unidad 3: Ingeniería Web dirigida por modelos
IW Unidad 3: Ingeniería Web dirigida por modelosFranklin Parrales Bravo
 
IW Unidad 2: Metodologías y Técnicas de la Ingeniería Web
IW Unidad 2: Metodologías y Técnicas de la Ingeniería WebIW Unidad 2: Metodologías y Técnicas de la Ingeniería Web
IW Unidad 2: Metodologías y Técnicas de la Ingeniería WebFranklin Parrales Bravo
 
AD Unidad4: Programación paralela y distribuida
AD Unidad4: Programación paralela y distribuidaAD Unidad4: Programación paralela y distribuida
AD Unidad4: Programación paralela y distribuidaFranklin Parrales Bravo
 
AD Unidad3: Tecnologías de aplicaciones distribuidas
AD Unidad3: Tecnologías de aplicaciones distribuidasAD Unidad3: Tecnologías de aplicaciones distribuidas
AD Unidad3: Tecnologías de aplicaciones distribuidasFranklin Parrales Bravo
 
EP Unidad03: Planificación financiera y análisis de riesgos
EP Unidad03: Planificación financiera y análisis de riesgosEP Unidad03: Planificación financiera y análisis de riesgos
EP Unidad03: Planificación financiera y análisis de riesgosFranklin Parrales Bravo
 
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidosAD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidosFranklin Parrales Bravo
 
AD Unidad1: Fundamentos de sistemas paralelos y distribuidos
AD Unidad1: Fundamentos de sistemas paralelos y distribuidosAD Unidad1: Fundamentos de sistemas paralelos y distribuidos
AD Unidad1: Fundamentos de sistemas paralelos y distribuidosFranklin Parrales Bravo
 
EP Unidad01: Principios básicos de la metodología de proyectos
EP Unidad01: Principios básicos de la metodología de proyectosEP Unidad01: Principios básicos de la metodología de proyectos
EP Unidad01: Principios básicos de la metodología de proyectosFranklin Parrales Bravo
 
EP Unidad02: Conceptos para el alcance, tiempo y muestra
EP Unidad02: Conceptos para el alcance, tiempo y muestraEP Unidad02: Conceptos para el alcance, tiempo y muestra
EP Unidad02: Conceptos para el alcance, tiempo y muestraFranklin Parrales Bravo
 
GCSW Unidad1: Objetos de la Gestión de Configuración del Software
GCSW Unidad1: Objetos de la Gestión de Configuración del SoftwareGCSW Unidad1: Objetos de la Gestión de Configuración del Software
GCSW Unidad1: Objetos de la Gestión de Configuración del SoftwareFranklin Parrales Bravo
 
GCSW Unidad2: Actividades de la gestión de configuración del software
GCSW Unidad2: Actividades de la gestión de configuración del software GCSW Unidad2: Actividades de la gestión de configuración del software
GCSW Unidad2: Actividades de la gestión de configuración del software Franklin Parrales Bravo
 
POO Unidad 4: Persistencia de objetos y manejo de archivos
POO Unidad 4: Persistencia de objetos y manejo de archivosPOO Unidad 4: Persistencia de objetos y manejo de archivos
POO Unidad 4: Persistencia de objetos y manejo de archivosFranklin Parrales Bravo
 
POO Unidad 3: Interfaz gráfica de usuario e hilos
POO Unidad 3: Interfaz gráfica de usuario e hilosPOO Unidad 3: Interfaz gráfica de usuario e hilos
POO Unidad 3: Interfaz gráfica de usuario e hilosFranklin Parrales Bravo
 
POO Unidad 2: Programación Orientada a Objetos
POO Unidad 2: Programación Orientada a ObjetosPOO Unidad 2: Programación Orientada a Objetos
POO Unidad 2: Programación Orientada a ObjetosFranklin Parrales Bravo
 
POO Unidad 1: Introducción a la Programación Orientada a Objetos
POO Unidad 1: Introducción a la Programación Orientada a ObjetosPOO Unidad 1: Introducción a la Programación Orientada a Objetos
POO Unidad 1: Introducción a la Programación Orientada a ObjetosFranklin Parrales Bravo
 
RD Unidad 3: IPv6, Routers y Enrutamiento
RD Unidad 3: IPv6, Routers y EnrutamientoRD Unidad 3: IPv6, Routers y Enrutamiento
RD Unidad 3: IPv6, Routers y EnrutamientoFranklin Parrales Bravo
 

More from Franklin Parrales Bravo (20)

Presentacion del congreso ETCM del 2021 en Cuenca
Presentacion del congreso ETCM del 2021 en CuencaPresentacion del congreso ETCM del 2021 en Cuenca
Presentacion del congreso ETCM del 2021 en Cuenca
 
IW Unidad 1: Introducción a la Ingeniería Web
IW Unidad 1: Introducción a la Ingeniería WebIW Unidad 1: Introducción a la Ingeniería Web
IW Unidad 1: Introducción a la Ingeniería Web
 
IW Unidad 4: Web accesible, semántica y ubicua
IW Unidad 4: Web accesible, semántica y ubicuaIW Unidad 4: Web accesible, semántica y ubicua
IW Unidad 4: Web accesible, semántica y ubicua
 
IW Unidad 3: Ingeniería Web dirigida por modelos
IW Unidad 3: Ingeniería Web dirigida por modelosIW Unidad 3: Ingeniería Web dirigida por modelos
IW Unidad 3: Ingeniería Web dirigida por modelos
 
MOD Unidad 2: Tipos de modelado
MOD Unidad 2: Tipos de modeladoMOD Unidad 2: Tipos de modelado
MOD Unidad 2: Tipos de modelado
 
IW Unidad 2: Metodologías y Técnicas de la Ingeniería Web
IW Unidad 2: Metodologías y Técnicas de la Ingeniería WebIW Unidad 2: Metodologías y Técnicas de la Ingeniería Web
IW Unidad 2: Metodologías y Técnicas de la Ingeniería Web
 
AD Unidad4: Programación paralela y distribuida
AD Unidad4: Programación paralela y distribuidaAD Unidad4: Programación paralela y distribuida
AD Unidad4: Programación paralela y distribuida
 
AD Unidad3: Tecnologías de aplicaciones distribuidas
AD Unidad3: Tecnologías de aplicaciones distribuidasAD Unidad3: Tecnologías de aplicaciones distribuidas
AD Unidad3: Tecnologías de aplicaciones distribuidas
 
EP Unidad03: Planificación financiera y análisis de riesgos
EP Unidad03: Planificación financiera y análisis de riesgosEP Unidad03: Planificación financiera y análisis de riesgos
EP Unidad03: Planificación financiera y análisis de riesgos
 
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidosAD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
 
AD Unidad1: Fundamentos de sistemas paralelos y distribuidos
AD Unidad1: Fundamentos de sistemas paralelos y distribuidosAD Unidad1: Fundamentos de sistemas paralelos y distribuidos
AD Unidad1: Fundamentos de sistemas paralelos y distribuidos
 
EP Unidad01: Principios básicos de la metodología de proyectos
EP Unidad01: Principios básicos de la metodología de proyectosEP Unidad01: Principios básicos de la metodología de proyectos
EP Unidad01: Principios básicos de la metodología de proyectos
 
EP Unidad02: Conceptos para el alcance, tiempo y muestra
EP Unidad02: Conceptos para el alcance, tiempo y muestraEP Unidad02: Conceptos para el alcance, tiempo y muestra
EP Unidad02: Conceptos para el alcance, tiempo y muestra
 
GCSW Unidad1: Objetos de la Gestión de Configuración del Software
GCSW Unidad1: Objetos de la Gestión de Configuración del SoftwareGCSW Unidad1: Objetos de la Gestión de Configuración del Software
GCSW Unidad1: Objetos de la Gestión de Configuración del Software
 
GCSW Unidad2: Actividades de la gestión de configuración del software
GCSW Unidad2: Actividades de la gestión de configuración del software GCSW Unidad2: Actividades de la gestión de configuración del software
GCSW Unidad2: Actividades de la gestión de configuración del software
 
POO Unidad 4: Persistencia de objetos y manejo de archivos
POO Unidad 4: Persistencia de objetos y manejo de archivosPOO Unidad 4: Persistencia de objetos y manejo de archivos
POO Unidad 4: Persistencia de objetos y manejo de archivos
 
POO Unidad 3: Interfaz gráfica de usuario e hilos
POO Unidad 3: Interfaz gráfica de usuario e hilosPOO Unidad 3: Interfaz gráfica de usuario e hilos
POO Unidad 3: Interfaz gráfica de usuario e hilos
 
POO Unidad 2: Programación Orientada a Objetos
POO Unidad 2: Programación Orientada a ObjetosPOO Unidad 2: Programación Orientada a Objetos
POO Unidad 2: Programación Orientada a Objetos
 
POO Unidad 1: Introducción a la Programación Orientada a Objetos
POO Unidad 1: Introducción a la Programación Orientada a ObjetosPOO Unidad 1: Introducción a la Programación Orientada a Objetos
POO Unidad 1: Introducción a la Programación Orientada a Objetos
 
RD Unidad 3: IPv6, Routers y Enrutamiento
RD Unidad 3: IPv6, Routers y EnrutamientoRD Unidad 3: IPv6, Routers y Enrutamiento
RD Unidad 3: IPv6, Routers y Enrutamiento
 

ED Unidad 2: Recursividad, ordenamiento y búsqueda de datos

  • 1. Estructuras de datos Carrera de Software Ph.D. Franklin Parrales 1 31/10/2021 Recursividad, ordenamiento y búsqueda de datos Unidad 2 Material docente compilado por el profesor Ph.D. Franklin Parrales Bravo para uso de los cursos de Estructuras de Datos
  • 2. Estructuras de datos Carrera de Software Ph.D. Franklin Parrales 2 31/10/2021 Objetivo general de la Unidad 2 Implementar rutinas recursivas y algoritmos de búsqueda / ordenamiento de datos con objetos para la elaboración de programas
  • 3. Estructuras de datos Carrera de Software Ph.D. Franklin Parrales 3 31/10/2021 Contenido • Algoritmos recursivos – Recursión vs iteración – Métodos recursivos • Algoritmos de ordenamiento de datos – Ordenación por BubleSort – Ordenación por selección – Ordenación por inserción – Ordenación QuickSort – Ordenamiento de objetos • Algoritmos de búsqueda de datos. – Búsqueda secuencial – Búsqueda binaria
  • 4. Estructuras de datos Carrera de Software Ph.D. Franklin Parrales 4 31/10/2021 Recursión • La estrategia a seguir es la delegación de tareas. • Es decir que un problema grande se subdivide en pequeñas tareas, y éstas se delegan. • Implica llamar al mismo procedimiento varias veces.
  • 5. Estructuras de datos Carrera de Software Ph.D. Franklin Parrales 5 31/10/2021 La Función Factorial • La propiedad primordial del factorial es que está relacionada a su anterior valor n!=n*(n-1)! static long factorial (int n){ long fact; fact = 1; for(int i = 1; i <=n; i++) fact = fact * i; return (fact); }
  • 6. Estructuras de datos Carrera de Software Ph.D. Franklin Parrales 6 31/10/2021 La Función Factorial • La función factorial se define como: n! = 1 si n=0 n*(n-1)! En otro caso • Dicha definición es recursiva, porque n! está en términos de (n-1)!, lo cual tiene la misma forma del original. • La implementación de la función en Java usando recursión sería: static long factorial (int n){ if (n <= 1) return 1; else { long resultado = n * factorial(n - 1); return resultado; } }
  • 7. Estructuras de datos Carrera de Software Ph.D. Franklin Parrales 7 31/10/2021 Manejo Interno de la Recursión • En el proceso de encontrar la respuesta, el computador va hacia los procesos internos, que son las llamadas al mismo procedimiento una y otra vez. • Supongamos que se quiere evaluar fact= Factorial(4); • En el programa principal se hace la primera llamada a la función.
  • 8. Estructuras de datos Carrera de Software Ph.D. Franklin Parrales 8 31/10/2021 Primera llamada main Factorial 4 n if(n==0){ return(1); } else{ return(n*Factorial(n-1)); } ? La función llama a Factorial(n-1), y tan pronto ésta regrese, se ejecuta la operación indicada
  • 9. Estructuras de datos Carrera de Software Ph.D. Franklin Parrales 9 31/10/2021 Segunda llamada main Factorial 3 n if(n==0){ return(1); } else{ return(n*Factorial(n-1)); } ? Factorial Igualmente al anterior caso, aquí se hace otro llamado interno a la función, y la operación no se realiza hasta que se retorne dicho valor
  • 10. Estructuras de datos Carrera de Software Ph.D. Franklin Parrales 10 31/10/2021 Tercera llamada main Factorial 2 n if(n==0){ return(1); } else{ return(n*Factorial(n-1)); } ? Factorial Siguiendo la lógica, se llama a Factorial(1), y éste a su vez llama a Factorial(0), realizándose dos llamadas más a la función Factorial
  • 11. Estructuras de datos Carrera de Software Ph.D. Franklin Parrales 11 31/10/2021 Última llamada Factorial 0 n if(n==0){ return(1); } else{ return(n*Factorial(n-1)); } Factorial Factorial main Factorial Factorial En este punto, la situación varía, como n es 0, la función retorna su resultado inmediatamente return(1);
  • 12. Estructuras de datos Carrera de Software Ph.D. Franklin Parrales 12 31/10/2021 Retorno Factorial 1 n if(n==0){ return(1); } else{ return(n*Factorial(n-1)); } Factorial Factorial Factorial main 1 Desde este punto, se devuelve el retorno a cada llamada recursiva return(1*1);
  • 13. Estructuras de datos Carrera de Software Ph.D. Franklin Parrales 13 31/10/2021 Retorno main Factorial 2 n if(n==0){ return(1); } else{ return(n*Factorial(n-1)); } 1 Factorial Factorial return(2*1);
  • 14. Estructuras de datos Carrera de Software Ph.D. Franklin Parrales 14 31/10/2021 Retorno Factorial 3 n if(n==0){ return(1); } else{ return(n*Factorial(n-1)); } 2 Factorial main return(3*2);
  • 15. Estructuras de datos Carrera de Software Ph.D. Franklin Parrales 15 31/10/2021 Retorno main Factorial 4 n if(n==0){ return(1); } else{ return(n*Factorial(n-1)); } 6 return(4*6);
  • 16. Estructuras de datos Carrera de Software Ph.D. Franklin Parrales 16 31/10/2021 El Paradigma Recursivo • Toda función recursiva tiene la siguiente estructura: if(Prueba para el caso simple){ return(solución simple sin usar recursión); } else{ return(solución recursiva llamando a la misma función); }
  • 17. Estructuras de datos Carrera de Software Ph.D. Franklin Parrales 17 31/10/2021 Contenido • Algoritmos recursivos – Recursión vs iteración – Métodos recursivos • Algoritmos de ordenamiento de datos – Ordenación por BubleSort – Ordenación por selección – Ordenación por inserción – Ordenación QuickSort – Ordenamiento de objetos • Algoritmos de búsqueda de datos. – Búsqueda secuencial – Búsqueda binaria
  • 18. Estructuras de datos Carrera de Software Ph.D. Franklin Parrales 18 31/10/2021 Recursión vs iteración • La recursividad (recursión) es aquella propiedad que posee un método por la cual puede llamarse a sí mismo. • Normalmente, es menos eficiente en términos de tiempo de computadora que una solución iterativa, debido a las operaciones auxiliares que llevan consigo las invocaciones suplementarias a los métodos • Sin embargo, en muchas circunstancias, el uso de la recursión permite a los programadores especificar soluciones naturales, sencillas, que serían, en caso contrario, difíciles de resolver
  • 19. Estructuras de datos Carrera de Software Ph.D. Franklin Parrales 19 31/10/2021 Ejemplo • Dado un número natural n, obtener la suma de los dígitos de que consta. Presentar un algoritmo recursivo y otro iterativo • Se asume que el número es natural y que, por tanto, no tiene signo. La suma de los dígitos se puede expresar: suma = suma(n/10) + modulo (n,10) para n > 9 suma = n para n ≤ 9, caso base El caso base, el que se resuelve directamente, es n ≤ 9 y, a su vez, es la condición de parada
  • 20. Estructuras de datos Carrera de Software Ph.D. Franklin Parrales 20 31/10/2021 Solución recursiva int sumaRecursiva(int n) { if (n <= 9) return n; else return sumaRecursiva(n/10) + n%10; }
  • 21. Estructuras de datos Carrera de Software Ph.D. Franklin Parrales 21 31/10/2021 Solución iterativa • La solución iterativa se construye con un bucle mientras, repitiendo la acumulación del resto de dividir n por 10 y actualizando n en el cociente. • La condición de salida del bucle es que n sea menor o igual que 9 int sumaIterativa(int n){ int suma = 0; while (n > 9){ suma += n%10; n /= 10; } return (suma+n); }
  • 22. Estructuras de datos Carrera de Software Ph.D. Franklin Parrales 22 31/10/2021 Contenido • Algoritmos recursivos – Recursión vs iteración – Métodos recursivos • Algoritmos de ordenamiento de datos – Ordenación por BubleSort – Ordenación por selección – Ordenación por inserción – Ordenación QuickSort – Ordenamiento de objetos • Algoritmos de búsqueda de datos. – Búsqueda secuencial – Búsqueda binaria
  • 23. Estructuras de datos Carrera de Software Ph.D. Franklin Parrales 23 31/10/2021 Métodos recursivos • Un método recursivo es un método que se invoca a sí mismo de forma directa o indirecta. – En recursión directa, el código del método f() contiene una sentencia que invoca a f() – En recursión indirecta, el método f() invoca a un método g() que a su vez invoca al método p(), y así sucesivamente hasta que se invoca de nuevo al método f() • Para que sea correcto, debe existir una “forma de salir” de la secuencia de llamadas recursivas
  • 24. Estructuras de datos Carrera de Software Ph.D. Franklin Parrales 24 31/10/2021 Contenido • Algoritmos recursivos – Recursión vs iteración – Métodos recursivos • Algoritmos de ordenamiento de datos – Ordenación por BubleSort – Ordenación por selección – Ordenación por inserción – Ordenación QuickSort – Ordenamiento de objetos • Algoritmos de búsqueda de datos. – Búsqueda secuencial – Búsqueda binaria
  • 25. Estructuras de datos Carrera de Software Ph.D. Franklin Parrales 25 31/10/2021 Introducción • Tres operaciones muy importantes en programación: – ORDENACIÓN – BÚSQUEDA – MEZCLA • La Ordenación consiste en – Disponer un conjunto de datos en algún determinado orden con respecto a uno de los campos del conjunto – Una colección de datos puede ser almacenada en • Un array • Un archivo • Un array de registros • Una lista enlazada o un arbol Ordenación externa Ordenación interna
  • 26. Estructuras de datos Carrera de Software Ph.D. Franklin Parrales 26 31/10/2021 Introducción • El problema del ordenamiento puede establecerse mediante la siguiente acción: – Dados los elementos: – Ordenar consiste en permutar esos elementos en un orden tal que dada una función de ordenamiento f: n k k k a a a , , , 2 1  ) ( ) ( ) ( 2 1 n k k k a f a f a f     n a a a , , , 2 1 
  • 27. Estructuras de datos Carrera de Software Ph.D. Franklin Parrales 27 31/10/2021 Introducción • Normalmente, la función de ordenamiento no es evaluada de acuerdo a una regla de computación determinada, pero se guarda como un componente explícito (campo) de cada item (elemento). El valor de ese campo se llama la llave del item. • Un método de ordenamiento es estable si el orden relativo de elementos con igual llave permanece inalterado por el proceso de ordenamiento. • Se entiende que los métodos de ordenamiento buscan un uso eficiente de la memoria por lo que las permutaciones de elementos se hará in situ, es decir, usando el mismo contenedor original.
  • 28. Estructuras de datos Carrera de Software Ph.D. Franklin Parrales 28 31/10/2021 Introducción • En lo que sigue se considera que la estructura lineal (array, lista, vector o secuencia) a ordenar se representa por un array de objetos (números enteros): int a[ ] = new int[MAX]; • siendo MAX el número máximo de elementos del array. El orden de los elementos después de la ordenación se considera ascendente.
  • 29. Estructuras de datos Carrera de Software Ph.D. Franklin Parrales 29 31/10/2021 Métodos • Son numerosos • Se miden de acuerdo a la eficiencia – Se toman en cuenta dos criterios • Tiempo menor de ejecución • Menor número de instrucciones • Hay dos grupos de métodos – Directos • Burbuja, Selección, Inserción – Indirectos • Shell, quicksort, mergesort, etc.
  • 30. Estructuras de datos Carrera de Software Ph.D. Franklin Parrales 30 31/10/2021 Contenido • Algoritmos recursivos – Recursión vs iteración – Métodos recursivos • Algoritmos de ordenamiento de datos – Ordenación por BubleSort – Ordenación por selección – Ordenación por inserción – Ordenación QuickSort – Ordenamiento de objetos • Algoritmos de búsqueda de datos. – Búsqueda secuencial – Búsqueda binaria
  • 31. Estructuras de datos Carrera de Software Ph.D. Franklin Parrales 31 31/10/2021 Algoritmo burbuja • Es un método caracterizado por la comparación e intercambio de pares de elementos hasta que todos los elementos estén ordenados. • En cada iteración se coloca el elemento más pequeño (orden ascendente) en su lugar correcto, cambiándose además la posición de los demás elementos del array.
  • 32. Estructuras de datos Carrera de Software Ph.D. Franklin Parrales 32 31/10/2021 Burbuja (Bubble) • Este método realiza comparaciones de todas las posibles parejas de llaves intercambiando aquellas que se encuentran fuera de orden. • Utiliza un proceso repetitivo comparando las parejas de datos adyacentes del inicio al final del arreglo donde, después de la primer pasada la llave mayor queda en la última posición del arreglo.
  • 33. Estructuras de datos Carrera de Software Ph.D. Franklin Parrales 33 31/10/2021 Burbuja (Bubble) Variables • n es el total de elementos • K arreglo de llaves • t variable auxiliar para el intercambio • i,j variables para los indices Burbuja Inicio para i= n-1 ; i>0 ; i-- para j=0; i>j; j++ si (k[j] > k[j+1]) t = k[j]; k[j]= k[j+1]; k[j+1] = t; Fin 3 8 2 1 4 0 1 2 3 4 5 2 K 3 8 2 1 4 2 3 2 8 1 4 2 3 2 1 8 4 2 3 2 1 4 8 2 3 2 1 4 2 8 Primera pasada
  • 34. Estructuras de datos Carrera de Software Ph.D. Franklin Parrales 34 31/10/2021 3 2 1 4 2 8 2 3 1 4 2 8 2 1 3 4 2 8 2 1 3 4 2 8 2 1 3 2 4 8 Segunda pasada 2 1 3 2 4 8 1 2 3 2 4 8 1 2 3 2 4 8 1 2 2 3 4 8 Tercer pasada 1 2 2 3 4 8 1 2 2 3 4 8 1 2 2 3 4 8 Cuarta pasada 1 2 2 3 4 8 1 2 2 3 4 8 Quinta pasada
  • 35. Estructuras de datos Carrera de Software Ph.D. Franklin Parrales 35 31/10/2021 Ejemplo y análisis • Es un algoritmo sencillo pero poco eficiente – En la primera revisión, se efectúan n-1 comparaciones – En la segunda, n-2…. y en la ultima, 1 comparacion – En total se efectuaran ½(n2-n) comparaciones – Es un algoritmo O(n2), es decir, es lento 23 19 45 6 19 23 Comparación No. Revisión No. 1 1 2 3 6 45 2 6 23 3 6 19
  • 36. Estructuras de datos Carrera de Software Ph.D. Franklin Parrales 36 31/10/2021 BUBBLESORT-resumen • Este algoritmo – Consiste en “revisar” varias veces la lista – Para una lista de n elementos, se la revisara n-1 veces • En cada revisión i – Se comparan los n-i elementos adyacentes – Ubicando los mayores al final de la lista – Y burbujeando los menores hacia el inicio de la misma
  • 37. Estructuras de datos Carrera de Software Ph.D. Franklin Parrales 37 31/10/2021 Algoritmo BubleSort static void bubbleSort(int[] arr) { int n = arr.length; int temp = 0; for(int i=0; i < n; i++){ for(int j=1; j < (n-i); j++){ if(arr[j-1] > arr[j]){ //swap elements temp = arr[j-1]; arr[j-1] = arr[j]; arr[j] = temp; } } } } public static void main(String[] args) { int arr[] ={3,60,35,2,45,320,5}; System.out.println("Array Before Bubble Sort"); for(int i=0; i < arr.length; i++){ System.out.print(arr[i] + " "); } System.out.println(); bubbleSort(arr); //sorting array elements using bubble sort System.out.println("Array After Bubble Sort"); for(int i=0; i < arr.length; i++){ System.out.print(arr[i] + " "); } } Ejemplo de uso
  • 38. Estructuras de datos Carrera de Software Ph.D. Franklin Parrales 38 31/10/2021 Contenido • Algoritmos recursivos – Recursión vs iteración – Métodos recursivos • Algoritmos de ordenamiento de datos – Ordenación por BubleSort – Ordenación por selección – Ordenación por inserción – Ordenación QuickSort – Ordenamiento de objetos • Algoritmos de búsqueda de datos. – Búsqueda secuencial – Búsqueda binaria
  • 39. Estructuras de datos Carrera de Software Ph.D. Franklin Parrales 39 31/10/2021 Algoritmo de selección (Selection Sort) • En éste método, en el i-ésimo paso seleccionamos el elemento con la llave de menor valor, entre a[i],…, a[n] y lo intercambiamos con a[i]. • Como resultado, después de i pasadas, el i-ésimo elemento menor ocupará a[1],…, a[i] en el lugar ordenado.
  • 40. Estructuras de datos Carrera de Software Ph.D. Franklin Parrales 40 31/10/2021 Algoritmo de selección (Selection Sort) • En una lista con n elementos, este algoritmo – Busca el elemento mayor de la lista ei – Lo reubica al final, intercambiando ei con en • Se aplica el mismo algoritmo pero – Se reduce n en una unidad (n-1) • Así, hasta que la lista solo contenga 2 elementos
  • 41. Estructuras de datos Carrera de Software Ph.D. Franklin Parrales 41 31/10/2021 Selection Sort 5 1 3 4 6 2 Comparison Data Movement Sorted
  • 42. Estructuras de datos Carrera de Software Ph.D. Franklin Parrales 42 31/10/2021 Selection Sort 5 1 3 4 6 2 Comparison Data Movement Sorted
  • 43. Estructuras de datos Carrera de Software Ph.D. Franklin Parrales 43 31/10/2021 Selection Sort 5 1 3 4 6 2 Comparison Data Movement Sorted
  • 44. Estructuras de datos Carrera de Software Ph.D. Franklin Parrales 44 31/10/2021 Selection Sort 5 1 3 4 6 2 Comparison Data Movement Sorted
  • 45. Estructuras de datos Carrera de Software Ph.D. Franklin Parrales 45 31/10/2021 Selection Sort 5 1 3 4 6 2 Comparison Data Movement Sorted
  • 46. Estructuras de datos Carrera de Software Ph.D. Franklin Parrales 46 31/10/2021 Selection Sort 5 1 3 4 6 2 Comparison Data Movement Sorted
  • 47. Estructuras de datos Carrera de Software Ph.D. Franklin Parrales 47 31/10/2021 Selection Sort 5 1 3 4 6 2 Comparison Data Movement Sorted
  • 48. Estructuras de datos Carrera de Software Ph.D. Franklin Parrales 48 31/10/2021 Selection Sort 5 1 3 4 6 2 Comparison Data Movement Sorted  Largest
  • 49. Estructuras de datos Carrera de Software Ph.D. Franklin Parrales 49 31/10/2021 Selection Sort 5 1 3 4 2 6 Comparison Data Movement Sorted
  • 50. Estructuras de datos Carrera de Software Ph.D. Franklin Parrales 50 31/10/2021 Selection Sort 5 1 3 4 2 6 Comparison Data Movement Sorted
  • 51. Estructuras de datos Carrera de Software Ph.D. Franklin Parrales 51 31/10/2021 Selection Sort 5 1 3 4 2 6 Comparison Data Movement Sorted
  • 52. Estructuras de datos Carrera de Software Ph.D. Franklin Parrales 52 31/10/2021 Selection Sort 5 1 3 4 2 6 Comparison Data Movement Sorted
  • 53. Estructuras de datos Carrera de Software Ph.D. Franklin Parrales 53 31/10/2021 Selection Sort 5 1 3 4 2 6 Comparison Data Movement Sorted
  • 54. Estructuras de datos Carrera de Software Ph.D. Franklin Parrales 54 31/10/2021 Selection Sort 5 1 3 4 2 6 Comparison Data Movement Sorted
  • 55. Estructuras de datos Carrera de Software Ph.D. Franklin Parrales 55 31/10/2021 Selection Sort 5 1 3 4 2 6 Comparison Data Movement Sorted
  • 56. Estructuras de datos Carrera de Software Ph.D. Franklin Parrales 56 31/10/2021 Selection Sort 5 1 3 4 2 6 Comparison Data Movement Sorted  Largest
  • 57. Estructuras de datos Carrera de Software Ph.D. Franklin Parrales 57 31/10/2021 Selection Sort 2 1 3 4 5 6 Comparison Data Movement Sorted
  • 58. Estructuras de datos Carrera de Software Ph.D. Franklin Parrales 58 31/10/2021 Selection Sort 2 1 3 4 5 6 Comparison Data Movement Sorted
  • 59. Estructuras de datos Carrera de Software Ph.D. Franklin Parrales 59 31/10/2021 Selection Sort 2 1 3 4 5 6 Comparison Data Movement Sorted
  • 60. Estructuras de datos Carrera de Software Ph.D. Franklin Parrales 60 31/10/2021 Selection Sort 2 1 3 4 5 6 Comparison Data Movement Sorted
  • 61. Estructuras de datos Carrera de Software Ph.D. Franklin Parrales 61 31/10/2021 Selection Sort 2 1 3 4 5 6 Comparison Data Movement Sorted
  • 62. Estructuras de datos Carrera de Software Ph.D. Franklin Parrales 62 31/10/2021 Selection Sort 2 1 3 4 5 6 Comparison Data Movement Sorted
  • 63. Estructuras de datos Carrera de Software Ph.D. Franklin Parrales 63 31/10/2021 Selection Sort 2 1 3 4 5 6 Comparison Data Movement Sorted  Largest
  • 64. Estructuras de datos Carrera de Software Ph.D. Franklin Parrales 64 31/10/2021 Selection Sort 2 1 3 4 5 6 Comparison Data Movement Sorted
  • 65. Estructuras de datos Carrera de Software Ph.D. Franklin Parrales 65 31/10/2021 Selection Sort 2 1 3 4 5 6 Comparison Data Movement Sorted
  • 66. Estructuras de datos Carrera de Software Ph.D. Franklin Parrales 66 31/10/2021 Selection Sort 2 1 3 4 5 6 Comparison Data Movement Sorted
  • 67. Estructuras de datos Carrera de Software Ph.D. Franklin Parrales 67 31/10/2021 Selection Sort 2 1 3 4 5 6 Comparison Data Movement Sorted
  • 68. Estructuras de datos Carrera de Software Ph.D. Franklin Parrales 68 31/10/2021 Selection Sort 2 1 3 4 5 6 Comparison Data Movement Sorted
  • 69. Estructuras de datos Carrera de Software Ph.D. Franklin Parrales 69 31/10/2021 Selection Sort 2 1 3 4 5 6 Comparison Data Movement Sorted  Largest
  • 70. Estructuras de datos Carrera de Software Ph.D. Franklin Parrales 70 31/10/2021 Selection Sort 2 1 3 4 5 6 Comparison Data Movement Sorted
  • 71. Estructuras de datos Carrera de Software Ph.D. Franklin Parrales 71 31/10/2021 Selection Sort 2 1 3 4 5 6 Comparison Data Movement Sorted
  • 72. Estructuras de datos Carrera de Software Ph.D. Franklin Parrales 72 31/10/2021 Selection Sort 2 1 3 4 5 6 Comparison Data Movement Sorted
  • 73. Estructuras de datos Carrera de Software Ph.D. Franklin Parrales 73 31/10/2021 Selection Sort 2 1 3 4 5 6 Comparison Data Movement Sorted
  • 74. Estructuras de datos Carrera de Software Ph.D. Franklin Parrales 74 31/10/2021 Selection Sort 2 1 3 4 5 6 Comparison Data Movement Sorted  Largest
  • 75. Estructuras de datos Carrera de Software Ph.D. Franklin Parrales 75 31/10/2021 Selection Sort 1 2 3 4 5 6 Comparison Data Movement Sorted
  • 76. Estructuras de datos Carrera de Software Ph.D. Franklin Parrales 76 31/10/2021 Selection Sort 1 2 3 4 5 6 Comparison Data Movement Sorted DONE!
  • 77. Estructuras de datos Carrera de Software Ph.D. Franklin Parrales 77 31/10/2021 Algoritmo selección public static void selectionSort(int[] arr){ for (int i = 0; i < arr.length - 1; i++) { int index = i; for (int j = i + 1; j < arr.length; j++){ if (arr[j] < arr[index]){ index = j;//searching for lowest index } } int smallerNumber = arr[index]; arr[index] = arr[i]; arr[i] = smallerNumber; } } public static void main(String a[]){ int[] arr1 = {9,14,3,2,43,11,58,22}; System.out.println("Before Selection Sort"); for(int i:arr1){ System.out.print(i+" "); } System.out.println(); selectionSort(arr1);//sorting array using sele ction sort System.out.println("After Selection Sort"); for(int i:arr1){ System.out.print(i+" "); } } Ejemplo de uso
  • 78. Estructuras de datos Carrera de Software Ph.D. Franklin Parrales 78 31/10/2021 Contenido • Algoritmos recursivos – Recursión vs iteración – Métodos recursivos • Algoritmos de ordenamiento de datos – Ordenación por BubleSort – Ordenación por selección – Ordenación por inserción – Ordenación QuickSort – Ordenamiento de objetos • Algoritmos de búsqueda de datos. – Búsqueda secuencial – Búsqueda binaria
  • 79. Estructuras de datos Carrera de Software Ph.D. Franklin Parrales 79 31/10/2021 Algoritmo inserción • Este método es usado por los jugadores de cartas. Los elementos están divididos conceptualmente en una secuencia destino y una secuencia fuente . • En cada paso, comenzando con i=2 e incrementando i en uno, el elemento i-ésimo de la secuencia fuente se toma y se transfiere a la secuencia destino insertándolo en el lugar adecuado. • En otras palabras, en el i-ésimo paso insertamos el i- ésimo elemento a[i] en su lugar correcto entre a[1], a[2],…., a[i-1], que fueron colocados en orden previamente.
  • 80. Estructuras de datos Carrera de Software Ph.D. Franklin Parrales 80 31/10/2021 Ordenamiento por inserción directa Variables – K arreglo de datos a ordenar – V variable auxiliar – i, j índices para el arreglo – N número de elementos InserciónDirecta Inicio Para i=2 hasta N incremento 1 v = K(i) //elemento a acomodar j = i Mientras (j > 1) y (K(j-1) > v) K(j) = K(j-1) //mueve elementos j = j-1 K(j) = v // inserta el elemento actual Fin 3 8 2 1 4 1 2 3 4 5 6 2 K 3 8 2 3 8 1 2 3 8 1 2 3 4 8 1 2 2 3 4 8
  • 81. Estructuras de datos Carrera de Software Ph.D. Franklin Parrales 81 31/10/2021 Algoritmo inserción public static void insertionSort(int array[]) { int n = array.length; for (int j = 1; j < n; j++) { int key = array[j]; int i = j-1; while ( (i > -1) && ( array [i] > key ) ) { array [i+1] = array [i]; i--; } array[i+1] = key; } } public static void main(String a[]){ int[] arr1 = {9,14,3,2,43,11,58,22}; System.out.println("Before Insertion Sort"); for(int i:arr1){ System.out.print(i+" "); } System.out.println(); insertionSort(arr1);//sorting array using inser tion sort System.out.println("After Insertion Sort"); for(int i:arr1){ System.out.print(i+" "); } } Ejemplo de uso
  • 82. Estructuras de datos Carrera de Software Ph.D. Franklin Parrales 82 31/10/2021 Contenido • Algoritmos recursivos – Recursión vs iteración – Métodos recursivos • Algoritmos de ordenamiento de datos – Ordenación por BubleSort – Ordenación por selección – Ordenación por inserción – Ordenación QuickSort – Ordenamiento de objetos • Algoritmos de búsqueda de datos. – Búsqueda secuencial – Búsqueda binaria
  • 83. Estructuras de datos Carrera de Software Ph.D. Franklin Parrales 83 31/10/2021 Quicksort: divide y conquista • Es el método de ordenación rápida mas veloz • Pero – Requiere gran cantidad de memoria para realizarlo • Consiste en: – Elija un elemento “pivote” al azar • Podría ser fijo el elemento de la mitad – Divida la lista en dos sublistas en base al pivote – Se deberá ordenar cada sublista, para que • Los elementos de la sublista izq. Sean menores al pivote • Los elementos de la sublista der. Sean mayores al pivote
  • 84. Estructuras de datos Carrera de Software Ph.D. Franklin Parrales 84 31/10/2021 Algoritmo rápido (Quicksort) • Descripción del algoritmo: 1) Dividir : Si la secuencia S tiene 2 o más elementos, seleccionar un elemento x de S como pivote. Cualquier elemento arbitrario, como el último, puede servir. Elimiar los elementos de S dividiéndolos en 3 secuencias: L, contiene los elementos de S menores que x E, contiene los elementos de S iguales a x G, contiene los elementos de S mayores que x 2) Recursión: De forma recursiva ordenar L y G 3) Vencer: Finalmente, colocar nuevamente los elementos en S en orden, primero insertar los elementos de L, después E, y los elementos de G.
  • 85. Estructuras de datos Carrera de Software Ph.D. Franklin Parrales 85 31/10/2021 El algoritmo • Escoger el pivote k – Usualmente el de la mitad • Ubicar referencias – i en el primer elemento y j en el ultimo • Mientras i <= j – Buscar primer elemento A[i] mayor o igual que A[k] – Buscar primer elemento A[j] menor o igual que A[k] – Si i <= j, • intercambiar A[i] con A[j] • I avanza y j retrocede un puesto Aplicar QuickSort a cada sublista
  • 86. Estructuras de datos Carrera de Software Ph.D. Franklin Parrales 86 31/10/2021 Análisis de quicksort • El mejor de los casos ocurrirá cuando – La división, en cada recursión, • Produce dos sublistas de igual longitud – La profundidad de la recursividad es • Log(n) – Y en cada nivel se trataran n elementos – En este caso, cae en el grupo de n*log(n) • El peor de los casos es cuando – La división en cada reexcursión es desbalanceada – La profundidad de la recursividad es n-1 – Y en ese caso, cae en el grupo n2
  • 87. Estructuras de datos Carrera de Software Ph.D. Franklin Parrales 87 31/10/2021 Idea de Quick Sort 1) Selección: tomar un elemento 2) Dividir: reordenar los elementos tal que x va a su posición final E 3) Recursión y Vencer: ordenar recursivamente
  • 88. Estructuras de datos Carrera de Software Ph.D. Franklin Parrales 88 31/10/2021 Quick Sort 5 1 3 8 7 4 6 2 Elements < pivot Elements > pivot Data Movement Sorted
  • 89. Estructuras de datos Carrera de Software Ph.D. Franklin Parrales 89 31/10/2021 Quick Sort 5 1 3 8 7 4 6 2 Elements < pivot Elements > pivot Data Movement Sorted  Pivot  First Unknown
  • 90. Estructuras de datos Carrera de Software Ph.D. Franklin Parrales 90 31/10/2021 Quick Sort 5 1 3 8 7 4 6 2 Elements < pivot Elements > pivot Data Movement Sorted  Pivot  First Unknown
  • 91. Estructuras de datos Carrera de Software Ph.D. Franklin Parrales 91 31/10/2021 Quick Sort 5 1 3 8 7 4 6 2 Elements < pivot Elements > pivot Data Movement Sorted  Pivot  First Unknown
  • 92. Estructuras de datos Carrera de Software Ph.D. Franklin Parrales 92 31/10/2021 Quick Sort 5 1 3 8 7 4 6 2 Elements < pivot Elements > pivot Data Movement Sorted  Pivot  First Unknown
  • 93. Estructuras de datos Carrera de Software Ph.D. Franklin Parrales 93 31/10/2021 Quick Sort 5 1 3 8 7 4 6 2 Elements < pivot Elements > pivot Data Movement Sorted  Pivot  First Unknown
  • 94. Estructuras de datos Carrera de Software Ph.D. Franklin Parrales 94 31/10/2021 Quick Sort 5 1 3 8 7 4 6 2 Elements < pivot Elements > pivot Data Movement Sorted  Pivot  First Unknown
  • 95. Estructuras de datos Carrera de Software Ph.D. Franklin Parrales 95 31/10/2021 Quick Sort 5 1 3 4 7 8 6 2 Elements < pivot Elements > pivot Data Movement Sorted  Pivot  First Unknown
  • 96. Estructuras de datos Carrera de Software Ph.D. Franklin Parrales 96 31/10/2021 Quick Sort 5 1 3 4 7 8 6 2 Elements < pivot Elements > pivot Data Movement Sorted  Pivot  First Unknown
  • 97. Estructuras de datos Carrera de Software Ph.D. Franklin Parrales 97 31/10/2021 Quick Sort 5 1 3 4 7 8 6 2 Elements < pivot Elements > pivot Data Movement Sorted  Pivot  First Unknown
  • 98. Estructuras de datos Carrera de Software Ph.D. Franklin Parrales 98 31/10/2021 Quick Sort 5 1 3 4 7 8 6 2 Elements < pivot Elements > pivot Data Movement Sorted  Pivot  First Unknown
  • 99. Estructuras de datos Carrera de Software Ph.D. Franklin Parrales 99 31/10/2021 Quick Sort 5 1 3 4 2 8 6 7 Elements < pivot Elements > pivot Data Movement Sorted  Pivot  First Unknown
  • 100. Estructuras de datos Carrera de Software Ph.D. Franklin Parrales 100 31/10/2021 Quick Sort 5 1 3 4 2 8 6 7 Elements < pivot Elements > pivot Data Movement Sorted  Pivot
  • 101. Estructuras de datos Carrera de Software Ph.D. Franklin Parrales 101 31/10/2021 Quick Sort 2 1 3 4 5 8 6 7 Elements < pivot Elements > pivot Data Movement Sorted  Pivot
  • 102. Estructuras de datos Carrera de Software Ph.D. Franklin Parrales 102 31/10/2021 Quick Sort 2 1 3 4 5 8 6 7 Elements < pivot Elements > pivot Data Movement Sorted
  • 103. Estructuras de datos Carrera de Software Ph.D. Franklin Parrales 103 31/10/2021 Quick Sort 2 1 3 4 5 8 6 7 Elements < pivot Elements > pivot Data Movement Sorted  Pivot  First Unknown
  • 104. Estructuras de datos Carrera de Software Ph.D. Franklin Parrales 104 31/10/2021 Quick Sort 2 1 3 4 5 8 6 7 Elements < pivot Elements > pivot Data Movement Sorted  Pivot  First Unknown
  • 105. Estructuras de datos Carrera de Software Ph.D. Franklin Parrales 105 31/10/2021 Quick Sort 2 1 3 4 5 8 6 7 Elements < pivot Elements > pivot Data Movement Sorted  Pivot  First Unknown
  • 106. Estructuras de datos Carrera de Software Ph.D. Franklin Parrales 106 31/10/2021 Quick Sort 2 1 3 4 5 8 6 7 Elements < pivot Elements > pivot Data Movement Sorted  Pivot
  • 107. Estructuras de datos Carrera de Software Ph.D. Franklin Parrales 107 31/10/2021 Quick Sort 1 2 3 4 5 8 6 7 Elements < pivot Elements > pivot Data Movement Sorted  Pivot
  • 108. Estructuras de datos Carrera de Software Ph.D. Franklin Parrales 108 31/10/2021 Quick Sort 1 2 3 4 5 8 6 7 Elements < pivot Elements > pivot Data Movement Sorted
  • 109. Estructuras de datos Carrera de Software Ph.D. Franklin Parrales 109 31/10/2021 Quick Sort 1 2 3 4 5 8 6 7 Elements < pivot Elements > pivot Data Movement Sorted
  • 110. Estructuras de datos Carrera de Software Ph.D. Franklin Parrales 110 31/10/2021 Quick Sort 1 2 3 4 5 8 6 7 Elements < pivot Elements > pivot Data Movement Sorted
  • 111. Estructuras de datos Carrera de Software Ph.D. Franklin Parrales 111 31/10/2021 Quick Sort 1 2 3 4 5 8 6 7 Elements < pivot Elements > pivot Data Movement Sorted  Pivot  First Unknown
  • 112. Estructuras de datos Carrera de Software Ph.D. Franklin Parrales 112 31/10/2021 Quick Sort 1 2 3 4 5 8 6 7 Elements < pivot Elements > pivot Data Movement Sorted  Pivot
  • 113. Estructuras de datos Carrera de Software Ph.D. Franklin Parrales 113 31/10/2021 Quick Sort 1 2 3 4 5 8 6 7 Elements < pivot Elements > pivot Data Movement Sorted  Pivot
  • 114. Estructuras de datos Carrera de Software Ph.D. Franklin Parrales 114 31/10/2021 Quick Sort 1 2 3 4 5 8 6 7 Elements < pivot Elements > pivot Data Movement Sorted
  • 115. Estructuras de datos Carrera de Software Ph.D. Franklin Parrales 115 31/10/2021 Quick Sort 1 2 3 4 5 8 6 7 Elements < pivot Elements > pivot Data Movement Sorted
  • 116. Estructuras de datos Carrera de Software Ph.D. Franklin Parrales 116 31/10/2021 Quick Sort 1 2 3 4 5 8 6 7 Elements < pivot Elements > pivot Data Movement Sorted
  • 117. Estructuras de datos Carrera de Software Ph.D. Franklin Parrales 117 31/10/2021 Quick Sort 1 2 3 4 5 8 6 7 Elements < pivot Elements > pivot Data Movement Sorted  Pivot  First Unknown
  • 118. Estructuras de datos Carrera de Software Ph.D. Franklin Parrales 118 31/10/2021 Quick Sort 1 2 3 4 5 8 6 7 Elements < pivot Elements > pivot Data Movement Sorted  Pivot  First Unknown
  • 119. Estructuras de datos Carrera de Software Ph.D. Franklin Parrales 119 31/10/2021 Quick Sort 1 2 3 4 5 8 6 7 Elements < pivot Elements > pivot Data Movement Sorted  Pivot
  • 120. Estructuras de datos Carrera de Software Ph.D. Franklin Parrales 120 31/10/2021 Quick Sort 1 2 3 4 5 7 6 8 Elements < pivot Elements > pivot Data Movement Sorted  Pivot
  • 121. Estructuras de datos Carrera de Software Ph.D. Franklin Parrales 121 31/10/2021 Quick Sort 1 2 3 4 5 7 6 8 Elements < pivot Elements > pivot Data Movement Sorted
  • 122. Estructuras de datos Carrera de Software Ph.D. Franklin Parrales 122 31/10/2021 Quick Sort 1 2 3 4 5 7 6 8 Elements < pivot Elements > pivot Data Movement Sorted
  • 123. Estructuras de datos Carrera de Software Ph.D. Franklin Parrales 123 31/10/2021 Quick Sort 1 2 3 4 5 7 6 8 Elements < pivot Elements > pivot Data Movement Sorted  Pivot  First Unknown
  • 124. Estructuras de datos Carrera de Software Ph.D. Franklin Parrales 124 31/10/2021 Quick Sort 1 2 3 4 5 7 6 8 Elements < pivot Elements > pivot Data Movement Sorted  Pivot
  • 125. Estructuras de datos Carrera de Software Ph.D. Franklin Parrales 125 31/10/2021 Quick Sort 1 2 3 4 5 6 7 8 Elements < pivot Elements > pivot Data Movement Sorted  Pivot
  • 126. Estructuras de datos Carrera de Software Ph.D. Franklin Parrales 126 31/10/2021 Quick Sort 1 2 3 4 5 6 7 8 Elements < pivot Elements > pivot Data Movement Sorted
  • 127. Estructuras de datos Carrera de Software Ph.D. Franklin Parrales 127 31/10/2021 Quick Sort 1 2 3 4 5 6 7 8 Elements < pivot Elements > pivot Data Movement Sorted
  • 128. Estructuras de datos Carrera de Software Ph.D. Franklin Parrales 128 31/10/2021 Quick Sort 1 2 3 4 5 6 7 8 Elements < pivot Elements > pivot Data Movement Sorted DONE!
  • 129. Estructuras de datos Carrera de Software Ph.D. Franklin Parrales 129 31/10/2021 Algoritmo Quicksort public static void quicksort(int A[], int izq, int der) { int pivote=A[izq]; // tomamos primer elemento como pivote int i=izq; // i realiza la búsqueda de izquierda a derecha int j=der; // j realiza la búsqueda de derecha a izquierda int aux; while(i < j){ // mientras no se crucen las búsquedas while(A[i] <= pivote && i < j) i++; // busca elemento mayor que pivote while(A[j] > pivote) j--; // busca elemento menor que pivote if (i < j) { // si no se han cruzado aux= A[i]; // los intercambia A[i]=A[j]; A[j]=aux; } } A[izq]=A[j]; // se coloca el pivote en su lugar de forma que tendremos A[j]=pivote; // los menores a su izquierda y los mayores a su derecha if(izq < j-1) quicksort(A,izq,j-1); // ordenamos subarray izquierdo if(j+1 < der) quicksort(A,j+1,der); // ordenamos subarray derecho }
  • 130. Estructuras de datos Carrera de Software Ph.D. Franklin Parrales 130 31/10/2021 De forma gráfica el proceso sería el siguiente:
  • 131. Estructuras de datos Carrera de Software Ph.D. Franklin Parrales 131 31/10/2021 Contenido • Algoritmos recursivos – Recursión vs iteración – Métodos recursivos • Algoritmos de ordenamiento de datos – Ordenación por BubleSort – Ordenación por selección – Ordenación por inserción – Ordenación QuickSort – Ordenamiento de objetos • Algoritmos de búsqueda de datos. – Búsqueda secuencial – Búsqueda binaria
  • 132. Estructuras de datos Carrera de Software Ph.D. Franklin Parrales 132 31/10/2021 Ordenamiento de objetos • Los diversos algoritmos que se han estudiado en los apartados anteriores siempre han ordenado arrays de un tipo de dato simple: int, double, ... • La clase Vector de Java está diseñada para almacenar objetos de cualquier tipo. En el Ejemplo se almacenan objetos de clases diferentes. class Racional { private int numerador, denominador; public Racional() { numerado = 0; denominador = 1; } public Racional(int n, int d)throws Exception { super(); numerado = n; if (d == 0) throw new Exception(" Denominador == 0"); denominador = d; } ... } for (int i = 0; i < 10; i++) v.addElement(new Racional(5*i%7, 3*i+1));
  • 133. Estructuras de datos Carrera de Software Ph.D. Franklin Parrales 133 31/10/2021 Ordenamiento de objetos • ¿Cómo comparar objetos? ¿Qué criterio seguir para determinar que el objeto p1 es menor que el objeto p2 ? • Una alternativa consiste en declarar un interface con los métodos menorQue(),menorIgualQue() …, y que las clases de los objetos que se ordenan implementen el interface. interface Comparador { boolean igualQue(Object op2); boolean menorQue(Object op2); boolean menorIgualQue(Object op2); boolean mayorQue(Object op2); boolean mayorIgualQue(Object op2); }
  • 134. Estructuras de datos Carrera de Software Ph.D. Franklin Parrales 134 31/10/2021 Ordenamiento de objetos class Racional implements Comparador { private int numerador, denominador; public boolean igualQue(Object op2) { Racional n2 = (Racional) op2; return ((double)numerador / (double)denominador) == ((double)n2.numerador / (double)n2.denominador ); } public boolean menorQue(Object op2) { Racional n2 = (Racional) op2; return ((double)numerador / (double)denominador) < ((double)n2.numerador / (double)n2.denominador ); } public boolean menorIgualQue(Object op2) { Racional n2 = (Racional) op2; return ((double)numerador / (double)denominador) <= ((double)n2.numerador / (double)n2.denominador ); } public boolean mayorQue(Object op2) { Racional n2 = (Racional) op2; return ((double)numerador / (double)denominador) > ((double)n2.numerador / (double)n2.denominador ); } public boolean mayorIgualQue(Object op2) { Racional n2 = (Racional) op2; return ((double)numerador / (double)denominador) >= (double)n2.numerador / (double)n2.denominador ); } }
  • 135. Estructuras de datos Carrera de Software Ph.D. Franklin Parrales 135 31/10/2021 Ordenamiento de objetos • Una vez establecidas las condiciones para realizar la ordenación, falta por elegir alguno de los algoritmos de ordenación. • Debido a su sencillez, se emplea el algoritmo de la burbuja (BubleSort) public static void ordVector (Vector v) { boolean interruptor = true; int pasada, j; int n = v.size(); // bucle externo controla la cantidad de pasadas for (pasada = 0; pasada < n-1 && interruptor; pasada++) { interruptor = false; for (j = 0; j < n-pasada-1; j++) { Racional r; r = (Racional)v.elementAt(j); if (r.mayorQue(v.elementAt(j+1))) { // elementos desordenados, se intercambian interruptor = true; intercambiar(v, j, j+1); } } } }
  • 136. Estructuras de datos Carrera de Software Ph.D. Franklin Parrales 136 31/10/2021 Ordenamiento de objetos private static void intercambiar (Vector v, int i, int j) { Object aux = v.elementAt(i); v.setElementAt(v.elementAt(j), i); v.setElementAt(aux, j); }
  • 137. Estructuras de datos Carrera de Software Ph.D. Franklin Parrales 137 31/10/2021 Contenido • Algoritmos recursivos – Recursión vs iteración – Métodos recursivos • Algoritmos de ordenamiento de datos – Ordenación por BubleSort – Ordenación por selección – Ordenación por inserción – Ordenación QuickSort – Ordenamiento de objetos • Algoritmos de búsqueda de datos. – Búsqueda secuencial – Búsqueda binaria
  • 138. Estructuras de datos Carrera de Software Ph.D. Franklin Parrales 138 31/10/2021 Introducción • Se trata de hallar un elemento de dato a través de una valor llave. Existen dos grupos de métodos de búsqueda: – Métodos simples: • Búsqueda lineal sobre un array • Búsqueda lineal sobre una lista enlazada • Búsqueda lineal sobre un array ordenado • Búsqueda lineal sobre una lista enlazada ordenada
  • 139. Estructuras de datos Carrera de Software Ph.D. Franklin Parrales 139 31/10/2021 Introducción – Métodos avanzados: • Búsqueda binaria sobre un array ordenado • Búsqueda por interpolación sobre un array ordenado • Búsqueda por interpolación sobre un array ordenado • Búsqueda binaria sobre un árbol binario de búsqueda • Búsqueda usando estrategia hash
  • 140. Estructuras de datos Carrera de Software Ph.D. Franklin Parrales 140 31/10/2021 Contenido • Algoritmos recursivos – Recursión vs iteración – Métodos recursivos • Algoritmos de ordenamiento de datos – Ordenación por BubleSort – Ordenación por selección – Ordenación por inserción – Ordenación QuickSort – Ordenamiento de objetos • Algoritmos de búsqueda de datos. – Búsqueda secuencial – Búsqueda binaria
  • 141. Estructuras de datos Carrera de Software Ph.D. Franklin Parrales 141 31/10/2021 Búsqueda Secuencial Consiste en ir comparando el elemento que se busca con cada elemento del arreglo hasta que se encuentra. I N F O M Á T I C A M M M M M 0 1 2 3 4 5 6 7 8 9 Índice resultado = 4
  • 142. Estructuras de datos Carrera de Software Ph.D. Franklin Parrales 142 31/10/2021 Algoritmo Búsqueda Secuencial for (i=0; i < LARGO; i++) if (a[i]==Elemento_buscado) printf(“Elemento encontrado en: %dn”, i);
  • 143. Estructuras de datos Carrera de Software Ph.D. Franklin Parrales 143 31/10/2021 Contenido • Algoritmos recursivos – Recursión vs iteración – Métodos recursivos • Algoritmos de ordenamiento de datos – Ordenación por BubleSort – Ordenación por selección – Ordenación por inserción – Ordenación QuickSort – Ordenamiento de objetos • Algoritmos de búsqueda de datos. – Búsqueda secuencial – Búsqueda binaria
  • 144. Estructuras de datos Carrera de Software Ph.D. Franklin Parrales 144 31/10/2021 Búsqueda Binaria Los elementos del arreglo se encuentran ordenados y no están repetidos. En cada iteración el dominio de búsqueda se divide en 2. 3 5 8 20 32 45 60 73 32 32 0 1 2 3 4 5 6 7 Resultado = 4 32
  • 145. Estructuras de datos Carrera de Software Ph.D. Franklin Parrales 145 31/10/2021 Algoritmo Búsqueda Binaria tipo A[LARGO] Max=LARGO-1; min=0; Encontrado=0; while(min+1<max && !Encontrado){ Medio=(Max+min)/2 if (A[Medio]==Elemento){ printf(“Elemento Encontradon”); Encontrado=1; /*Fuerza la salida del ciclo*/ } if (A[Medio]<Elemento) Max=Medio; if (A[Medio]>Elemento) min=Medio; }
  • 146. Estructuras de datos Carrera de Software Ph.D. Franklin Parrales 146 31/10/2021 Recursividad, ordenamiento y búsqueda de datos Unidad 2 Final de la unidad