6ppt-pdf - Escuela de Ingeniería Informática

Anuncio
PONTIFICIA
UNIVERSIDAD CATOLICA DE VALPARAISO
Escuela de Ingeniería Informática
Capítulo 3 – Ordenación(Clasificación) y Búsqueda
3.1.1 – Método de Intercambio o burbuja
Los computadores emplean gran parte de su tiempo en operaciones de
búsqueda y ordenamiento.
Existen 2 métodos de ordenación: ordenación interna (de arrays) y ordenación
externa (archivos).
Los arrays se almacenan en la memoria interna o central, de acceso aleatorio y
directo, y por ello su gestión es rápida.
Los archivos se sitúan adecuadamente en dispositivos de almacemaniento
externo, que son más lentos y basados en dispositivos mecánicos: cintas y
discos magnéticos.
Escuela de Ingeniería
Informática
ICI 241 – Estructura de Datos
PONTIFICIA
UNIVERSIDAD CATOLICA DE VALPARAISO
Escuela de Ingeniería Informática
Capítulo 3 – Ordenamiento y Búsqueda
64
72
50
50
50
50
50
50
50
50
64
23
23
23
23
23
23
23
50
50
72
23
23
23
23
23
23
23
23
64
64
64
64
64
64
64
23
23
23
72
72
72
72
72
72
72
72
72
72
18
18
18
18
18
Desarrollado por
Ricardo Soto De Giorgis
84
84
84
84
84
18
18
18
18
18
18
18
18
72
37
37
37
37
18
18
18
18
18
84
37
37
37
37
37
37
37
37
72
72
72
72
37
37
37
37
37
37
84
84
84
84
84
84
84
84
84
84
45
45
99 45
99 45
99 45
99 45
99 45
99 45
99 45
99 45
45 99
45 8
45 8
45 8
45 8
45 8
45 8
45 8
84 8
8 84
Consiste en insertar un elemento en el vector en una parte ya ordenada de este
vector y comenzar de nuevo con los elementos restantes.
Esta inserción se realiza más fácilmente con una bandera (sw)
Desarrollado por
Ricardo Soto De Giorgis
5
14
24
39
43
Escuela de Ingeniería
Informática
Desarrollado por
Ricardo Soto De Giorgis
Escuela de Ingeniería
Informática
PONTIFICIA
UNIVERSIDAD CATOLICA DE VALPARAISO
ICI 241 – Estructura de Datos
Escuela de Ingeniería Informática
Capítulo 3 – Ordenamiento y Búsqueda
3.1.2 – Ordenación por inserción directa (método de la baraja)
65
Escuela de Ingeniería Informática
void burbuja2(int n,float a[max])
{
int i,j;
float aux;
for (i=0;i<=n-1;i++)
for (j=0;j<=n-1-i;j++)
if(a[j]>a[j+1]){
aux=a[j];
a[j]=a[j+1];
a[j+1]=aux;
}
}
Capítulo 3 – Ordenamiento y Búsqueda
43
PONTIFICIA
UNIVERSIDAD CATOLICA DE VALPARAISO
ICI 241 – Estructura de Datos
Esto se refleja decrementando en 1 el límite superior del segundo bucle for
después de cada paso.
Escuela de Ingeniería Informática
39
Escuela de Ingeniería
Informática
En el primer recorrido del vector (cuando I=1) el valor mayor del vector se
mueve al último elemento a[n]. Por lo tanto, en el siguiente paso no es
necesario comparar a[n-1] y a[n].
PONTIFICIA
UNIVERSIDAD CATOLICA DE VALPARAISO
24
Desarrollado por
Ricardo Soto De Giorgis
Se puede realizar una mejora en la velocidad de ejecución del algoritmo.
8
8
8
8
8
8
8
8
8
99
99
99
99
99
99
99
99
99
ICI 241 – Estructura de Datos
14
void burbuja1(int n,float a[max])
{
int i,j;
float aux;
for (i=0;i<=n-1;i++)
for (j=0;j<=n-1;j++)
if(a[j]>a[j+1]){
aux=a[j];
a[j]=a[j+1];
a[j+1]=aux;
}
}
3.1.1 – Método de Intercambio o burbuja (mejorado)
Escuela de Ingeniería
Informática
5
Se basa en el principio de comparar pares de elementos adyacentes e
intercambiarlos entre si hasta que estén todos ordenados.
Capítulo 3 – Ordenamiento y Búsqueda
3.1.1 – Ejercicio - Método de Intercambio o burbuja
72
64
64
64
64
64
64
64
64
64
50
50
50
50
50
50
50
50
Escuela de Ingeniería Informática
Capítulo 3 – Ordenamiento y Búsqueda
3.1 – Ordenamiento Interno
Desarrollado por
Ricardo Soto De Giorgis
PONTIFICIA
UNIVERSIDAD CATOLICA DE VALPARAISO
84
45
65
84
45
ICI 241 – Estructura de Datos
3.1.2 – Ordenación por inserción directa (método de la baraja)
void insercion_directa(int n,float a[max])
{
int i,j,sw;
float aux;
for (i=1;i<=n-1;i++){
aux=a[i];
j=i-1;
sw=0;
while((j>=0) && (sw==0))
if (a[j]>aux){
a[j+1]=a[j];
j--;
}else sw=1;
a[j+1]=aux;
}
}
Desarrollado por
Ricardo Soto De Giorgis
Escuela de Ingeniería
Informática
ICI 241 – Estructura de Datos
1
PONTIFICIA
UNIVERSIDAD CATOLICA DE VALPARAISO
Escuela de Ingeniería Informática
Capítulo 3 – Ordenamiento y Búsqueda
64
72
64
50
50
23
23
23
23
18
50
50
72
64
64
50
37
37
37
23
Desarrollado por
Ricardo Soto De Giorgis
23
23
23
72
72
64
50
50
45
37
84
84
84
84
84
72
64
64
50
45
18
18
18
18
18
84
72
72
64
50
37
37
37
37
37
37
84
84
72
64
99
99
99
99
99
99
99
99
84
72
45
45
45
45
45
45
45
45
99
84
8
8
8
8
8
8
8
8
8
99
Escuela de Ingeniería
Informática
void insercion_binaria(int n,float a[max]){
int i,j,p,u,c;
float aux;
for (i=1;i<n;i++){
aux=a[i];
p=0;
u=i-1;
while(p<=u){
c=(p+u)/2;
if (a[c]>aux) u=c-1;
else p=c+1;
}
for(j=i-1;j>=p,j--)
a[j+1]=a[j];
a[p]=aux;
}
}
Escuela de Ingeniería Informática
Capítulo 3 – Ordenamiento y Búsqueda
72 64 50
23
84
18
37
99
45
8
64 72 50
23
84
18
37
99
45
8
50 64 72
23
84
18
37
99
45
8
23 50 64
72
84
18
37
99
45
8
23 50 64
72
84
18
37
99
45
8
18 23 50
64
72
84
37
99
45
8
18 23 37
50
64
72
84
99
45
8
18 23 37
50
64
72
84
99
45
8
18 23 37
45
50
64
72
84
99
8
8
37
45
50
64
72
84
99
Desarrollado por
Ricardo Soto De Giorgis
Escuela de Ingeniería
Informática
37
99
45
23
84
18
37
99
45 72
8 18 50
23
84
64
37
99
45 72
8 18 23
50
84
64
37
99
45 72
8 18 23
37
84
64
50
99
45 72
8 18 23
37
45
64
50
99
84 72
8 18 23
37
45
50
64
99
84 72
8 18 23
37
45
50
64
99
84 72
8 18 23
37
45
50
64
72
84 99
8 18 23
37
45
50
64
72
84 99
Escuela de Ingeniería
Informática
Escuela de Ingeniería
Informática
PONTIFICIA
UNIVERSIDAD CATOLICA DE VALPARAISO
ICI 241 – Estructura de Datos
Escuela de Ingeniería Informática
3.1.5 – Ordenación por inserción con incrementos decrecientes (Método Shell).
8
8 64 50
Desarrollado por
Ricardo Soto De Giorgis
Desarrollado por
Ricardo Soto De Giorgis
Capítulo 3 – Ordenamiento y Búsqueda
3.1.4 – Ejercicio - Ordenación por selección
18
Escuela de Ingeniería Informática
void seleccion(int n,float a[max]){
int i,j,k;
float aux;
for (i=0;i<n-1;i++){
k=i;
for(j=i+1;j<n;j++)
if (a[j]<a[k]) k=j;
aux=a[k];
a[k]=a[i];
a[i]=aux;
}
}
Escuela de Ingeniería Informática
84
PONTIFICIA
UNIVERSIDAD CATOLICA DE VALPARAISO
ICI 241 – Estructura de Datos
Este método se basa en buscar el elemento menor del vector y ubicarlo en
primera posición. Luego se busca el segundo elemento más pequeño y se ubica
en la segunda posición, y así sucesivamente.
Capítulo 3 – Ordenamiento y Búsqueda
23
Escuela de Ingeniería
Informática
3.1.4 – Ordenación por selección
ICI 241 – Estructura de Datos
PONTIFICIA
UNIVERSIDAD CATOLICA DE VALPARAISO
72 64 50
Desarrollado por
Ricardo Soto De Giorgis
Capítulo 3 – Ordenamiento y Búsqueda
3.1.3 – Ejercicio - Ordenación por inserción binaria
23
3.1.3 – Ordenación por inserción binaria
El método de inserción directa se puede mejorar fácilmente realizando, para
ubicar el lugar de inserción, una búsqueda binaria en vez de una búsqueda
secuencial.
ICI 241 – Estructura de Datos
PONTIFICIA
UNIVERSIDAD CATOLICA DE VALPARAISO
18
Escuela de Ingeniería Informática
Capítulo 3 – Ordenamiento y Búsqueda
3.1.2 – Ejercicio - Ordenación por inserción directa (método de la baraja)
72
64
50
23
23
18
18
18
18
8
PONTIFICIA
UNIVERSIDAD CATOLICA DE VALPARAISO
Es una mejora del método de inserción directa que se utiliza cuando el número
de elementos a ordenar es grande.
En el método de ordenación por inserción, cada elemento se compara con los
elementos contiguos de su izquierda, uno tras otro. Si el elemento a insertar es
uno de los más pequeños, hay que ejecutar muchas comparaciones antes de
ubicarlo en su lugar correcto
Shell modificó los saltos contiguos resultantes de las comparaciones por saltos
de mayor tamaño y con eso se consigue una ordenación más rápida
ICI 241 – Estructura de Datos
Desarrollado por
Ricardo Soto De Giorgis
Escuela de Ingeniería
Informática
ICI 241 – Estructura de Datos
2
PONTIFICIA
UNIVERSIDAD CATOLICA DE VALPARAISO
Escuela de Ingeniería Informática
Capítulo 3 – Ordenamiento y Búsqueda
PONTIFICIA
UNIVERSIDAD CATOLICA DE VALPARAISO
ICI 241 – Estructura de Datos
Escuela de Ingeniería Informática
Capítulo 3 – Ordenamiento y Búsqueda
void partir(int v[20],int p, int u){
int aux;
i=p,j=u;
x = v[(p+u)/2];
while (i<=j){
while (v[i]<x) i++;
while (v[j]>x)j--;
if (i<=j){
aux=v[i];
v[i]=v[j];
v[j]=aux;
i++;
j--;
}
}
if(p<j) partir(v,p,j);
if(i<u) partir(v,i,u);
}
PONTIFICIA
UNIVERSIDAD CATOLICA DE VALPARAISO
2
6
6
6
0
2
2
2
4
4
3
3
3
Desarrollado por
Ricardo Soto De Giorgis
3
3
3
3
3
3
3
3
3
3
4
4
4
4
4
4
5
5
5
5
5
5
5
5
5
5
0
0
0
0
6
6
6
6
6
6
6
6
6
i=3
i=4
i=5
i=6
i=6
i=1
i=2
i=3
i=3
i=4
i=4
i=5
i=6
salto=3
salto=1
Escuela de Ingeniería
Informática
PONTIFICIA
UNIVERSIDAD CATOLICA DE VALPARAISO
ICI 241 – Estructura de Datos
Escuela de Ingeniería Informática
18 11 27
4 11 27
4 11 9
[13] 9 4 16
[13] 9 18 16
[13] 27 18 16
4 [11] 9
4 [11] 9
4 9 11
ICI 241 – Estructura de Datos
Escuela de Ingeniería Informática
Capítulo 3 – Ordenamiento y Búsqueda
Desarrollado por
Ricardo Soto De Giorgis
Escuela de Ingeniería
Informática
PONTIFICIA
UNIVERSIDAD CATOLICA DE VALPARAISO
ICI 241 – Estructura de Datos
Escuela de Ingeniería Informática
Capítulo 3 – Ordenamiento y Búsqueda
3.2 – Búsqueda
3.2.1 – Búsqueda secuencial o lineal
Los computadores emplean gran parte de su tiempo en operaciones de
búsqueda y ordenamiento.
De igual forma que en el “Ordenamiento” existen 2 casos típicos de búsqueda:
búsqueda interna (de arrays) y búsqueda externa (archivos).
Los arrays se almacenan en la memoria interna o central, de acceso aleatorio y
directo, y por ello su gestión es rápida.
Los archivos se sitúan adecuadamente en dispositivos de almacemaniento
externo, que son más lentos y basados en dispositivos mecánicos: cintas y
discos magnéticos.
Desarrollado por
Ricardo Soto De Giorgis
5
5
5
4
4
4
4
4
2
2
2
2
2
3.1.6 – Ejercicio - Método de ordenación rápida (Quicksort).
Se basa en el hecho de que es más rápido y fácil ordenar dos listas pequeñas
que una lista grande.
Escuela de Ingeniería
Informática
1
1
1
1
1
1
1
1
1
1
1
1
1
Capítulo 3 – Ordenamiento y Búsqueda
3.1.6 – Método de ordenación rápida (Quicksort).
Desarrollado por
Ricardo Soto De Giorgis
3.1.5 – Ejercicio - Método Shell.
6
2
2
2
2
0
0
0
0
0
0
0
0
void shell(int n,float a[max]){
int i,j,k,salto;
float aux;
salto = n/2;
while (salto>0){
for (i=salto;i<n;i++){
j=i-salto;
while (j>=0){
k=j+salto;
if (a[j]<=a[k]) j=-1;
else{
aux=a[j];
a[j]=a[k];
a[k]=aux;
j=j-salto;
}
}
}
salto=salto/2;
}
}
Escuela de Ingeniería
Informática
Escuela de Ingeniería Informática
Capítulo 3 – Ordenamiento y Búsqueda
3.1.5 – Ordenación por inserción con incrementos decrecientes (Método Shell).
Desarrollado por
Ricardo Soto De Giorgis
PONTIFICIA
UNIVERSIDAD CATOLICA DE VALPARAISO
Escuela de Ingeniería
Informática
ICI 241 – Estructura de Datos
Se explora el vector en forma secuencial, es decir, se recorre el vector desde el
primer elemento al último.
Se compara cada elemento del vector con el valor deseado
Esta comparación se detiene cuando el elemento es encontrado o se recorrió
todo el vector.
No requiere vector ordenado
void secuencial(int v[20],int valor){
int i,enc=0;
while ((!enc)&&(i<20)){
if(v[i]==valor) enc=1;
else i++;
}
if(enc) printf(“valor %d encontrado en posición %d“,valor,i);
else printf(“valor no encontrado“);
}
Desarrollado por
Ricardo Soto De Giorgis
Escuela de Ingeniería
Informática
ICI 241 – Estructura de Datos
3
PONTIFICIA
UNIVERSIDAD CATOLICA DE VALPARAISO
Escuela de Ingeniería Informática
Capítulo 3 – Ordenamiento y Búsqueda
3.2.2 – Búsqueda binaria
Suponga que desea buscar el nombre de una persona en una guía telefónica,
normalmente no se buscaría en forma secuencial. Sino que se buscaría en la
primera o segunda mitad de la guía, una vez en esa mitad, se volvería a tantear
en una de sus dos submitades, y así sucesivamente se repitiría el proceso.
Requiere vector ordenado
void binaria(int v[20],int valor){
int i,enc=0;
i=0;p=19;
while((p<=u)&&(!enc)){
c=(p+u)/2;
if(v[c]==valor) enc=1;
else{
if (v[c]>valor) u=c-1;
else p=c+1;
}
}
if(enc) printf(“valor %d encontrado en posición %d“,valor,i);
else printf(“valor no encontrado“);
}
Desarrollado por
Ricardo Soto De Giorgis
Escuela de Ingeniería
Informática
ICI 241 – Estructura de Datos
4
Descargar