Sunteți pe pagina 1din 4

PONTIFICIA

UNIVERSIDAD CATOLICA DE VALPARAISO

Escuela de Ingeniera Informtica

Captulo 3 Ordenacin(Clasificacin) y Bsqueda

3.1.1 Mtodo de Intercambio o burbuja

Los computadores emplean gran parte de su tiempo en operaciones de


bsqueda y ordenamiento.
Existen 2 mtodos de ordenacin: ordenacin interna (de arrays) y ordenacin
externa (archivos).
Los arrays se almacenan en la memoria interna o central, de acceso aleatorio y
directo, y por ello su gestin es rpida.
Los archivos se sitan adecuadamente en dispositivos de almacemaniento
externo, que son ms lentos y basados en dispositivos mecnicos: cintas y
discos magnticos.

Escuela de Ingeniera
Informtica

ICI 241 Estructura de Datos

PONTIFICIA
UNIVERSIDAD CATOLICA DE VALPARAISO

Escuela de Ingeniera Informtica

Captulo 3 Ordenamiento y Bsqueda

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 insercin se realiza ms fcilmente con una bandera (sw)

Desarrollado por
Ricardo Soto De Giorgis

14

24

39

43

Escuela de Ingeniera
Informtica

Desarrollado por
Ricardo Soto De Giorgis

Escuela de Ingeniera
Informtica

PONTIFICIA
UNIVERSIDAD CATOLICA DE VALPARAISO

ICI 241 Estructura de Datos

Escuela de Ingeniera Informtica

Captulo 3 Ordenamiento y Bsqueda

3.1.2 Ordenacin por insercin directa (mtodo de la baraja)

65

Escuela de Ingeniera Informtica

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;
}
}

Captulo 3 Ordenamiento y Bsqueda

43

PONTIFICIA
UNIVERSIDAD CATOLICA DE VALPARAISO

ICI 241 Estructura de Datos

Esto se refleja decrementando en 1 el lmite superior del segundo bucle for


despus de cada paso.

Escuela de Ingeniera Informtica

39

Escuela de Ingeniera
Informtica

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 ejecucin 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 Mtodo de Intercambio o burbuja (mejorado)

Escuela de Ingeniera
Informtica

Se basa en el principio de comparar pares de elementos adyacentes e


intercambiarlos entre si hasta que estn todos ordenados.

Captulo 3 Ordenamiento y Bsqueda

3.1.1 Ejercicio - Mtodo de Intercambio o burbuja


72
64
64
64
64
64
64
64
64
64
50
50
50
50
50
50
50
50

Escuela de Ingeniera Informtica

Captulo 3 Ordenamiento y Bsqueda

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 Ordenacin por insercin directa (mtodo 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 Ingeniera
Informtica

ICI 241 Estructura de Datos

PONTIFICIA
UNIVERSIDAD CATOLICA DE VALPARAISO

Escuela de Ingeniera Informtica

Captulo 3 Ordenamiento y Bsqueda

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 Ingeniera
Informtica

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 Ingeniera Informtica

Captulo 3 Ordenamiento y Bsqueda

72 64 50

23

84

18

37

99

45

64 72 50

23

84

18

37

99

45

50 64 72

23

84

18

37

99

45

23 50 64

72

84

18

37

99

45

23 50 64

72

84

18

37

99

45

18 23 50

64

72

84

37

99

45

18 23 37

50

64

72

84

99

45

18 23 37

50

64

72

84

99

45

18 23 37

45

50

64

72

84

99

37

45

50

64

72

84

99

Desarrollado por
Ricardo Soto De Giorgis

Escuela de Ingeniera
Informtica

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 Ingeniera
Informtica

Escuela de Ingeniera
Informtica

PONTIFICIA
UNIVERSIDAD CATOLICA DE VALPARAISO

ICI 241 Estructura de Datos

Escuela de Ingeniera Informtica

3.1.5 Ordenacin por insercin con incrementos decrecientes (Mtodo Shell).


8

8 64 50

Desarrollado por
Ricardo Soto De Giorgis

Desarrollado por
Ricardo Soto De Giorgis

Captulo 3 Ordenamiento y Bsqueda

3.1.4 Ejercicio - Ordenacin por seleccin


18

Escuela de Ingeniera Informtica

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 Ingeniera Informtica

84

PONTIFICIA
UNIVERSIDAD CATOLICA DE VALPARAISO

ICI 241 Estructura de Datos

Este mtodo se basa en buscar el elemento menor del vector y ubicarlo en


primera posicin. Luego se busca el segundo elemento ms pequeo y se ubica
en la segunda posicin, y as sucesivamente.

Captulo 3 Ordenamiento y Bsqueda

23

Escuela de Ingeniera
Informtica

3.1.4 Ordenacin por seleccin

ICI 241 Estructura de Datos

PONTIFICIA
UNIVERSIDAD CATOLICA DE VALPARAISO

72 64 50

Desarrollado por
Ricardo Soto De Giorgis

Captulo 3 Ordenamiento y Bsqueda

3.1.3 Ejercicio - Ordenacin por insercin binaria

23

3.1.3 Ordenacin por insercin binaria


El mtodo de insercin directa se puede mejorar fcilmente realizando, para
ubicar el lugar de insercin, una bsqueda binaria en vez de una bsqueda
secuencial.

ICI 241 Estructura de Datos

PONTIFICIA
UNIVERSIDAD CATOLICA DE VALPARAISO

18

Escuela de Ingeniera Informtica

Captulo 3 Ordenamiento y Bsqueda

3.1.2 Ejercicio - Ordenacin por insercin directa (mtodo de la baraja)


72
64
50
23
23
18
18
18
18
8

PONTIFICIA
UNIVERSIDAD CATOLICA DE VALPARAISO

Es una mejora del mtodo de insercin directa que se utiliza cuando el nmero
de elementos a ordenar es grande.
En el mtodo de ordenacin por insercin, cada elemento se compara con los
elementos contiguos de su izquierda, uno tras otro. Si el elemento a insertar es
uno de los ms pequeos, 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 tamao y con eso se consigue una ordenacin ms rpida

ICI 241 Estructura de Datos

Desarrollado por
Ricardo Soto De Giorgis

Escuela de Ingeniera
Informtica

ICI 241 Estructura de Datos

PONTIFICIA
UNIVERSIDAD CATOLICA DE VALPARAISO

Escuela de Ingeniera Informtica

Captulo 3 Ordenamiento y Bsqueda

PONTIFICIA
UNIVERSIDAD CATOLICA DE VALPARAISO

ICI 241 Estructura de Datos

Escuela de Ingeniera Informtica

Captulo 3 Ordenamiento y Bsqueda

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 Ingeniera
Informtica

PONTIFICIA
UNIVERSIDAD CATOLICA DE VALPARAISO

ICI 241 Estructura de Datos

Escuela de Ingeniera Informtica

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 Ingeniera Informtica

Captulo 3 Ordenamiento y Bsqueda

Desarrollado por
Ricardo Soto De Giorgis

Escuela de Ingeniera
Informtica

PONTIFICIA
UNIVERSIDAD CATOLICA DE VALPARAISO

ICI 241 Estructura de Datos

Escuela de Ingeniera Informtica

Captulo 3 Ordenamiento y Bsqueda

3.2 Bsqueda

3.2.1 Bsqueda secuencial o lineal

Los computadores emplean gran parte de su tiempo en operaciones de


bsqueda y ordenamiento.
De igual forma que en el Ordenamiento existen 2 casos tpicos de bsqueda:
bsqueda interna (de arrays) y bsqueda externa (archivos).
Los arrays se almacenan en la memoria interna o central, de acceso aleatorio y
directo, y por ello su gestin es rpida.
Los archivos se sitan adecuadamente en dispositivos de almacemaniento
externo, que son ms lentos y basados en dispositivos mecnicos: cintas y
discos magnticos.

Desarrollado por
Ricardo Soto De Giorgis

5
5
5
4
4
4
4
4
2
2
2
2
2

3.1.6 Ejercicio - Mtodo de ordenacin rpida (Quicksort).

Se basa en el hecho de que es ms rpido y fcil ordenar dos listas pequeas


que una lista grande.

Escuela de Ingeniera
Informtica

1
1
1
1
1
1
1
1
1
1
1
1
1

Captulo 3 Ordenamiento y Bsqueda

3.1.6 Mtodo de ordenacin rpida (Quicksort).

Desarrollado por
Ricardo Soto De Giorgis

3.1.5 Ejercicio - Mtodo 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 Ingeniera
Informtica

Escuela de Ingeniera Informtica

Captulo 3 Ordenamiento y Bsqueda

3.1.5 Ordenacin por insercin con incrementos decrecientes (Mtodo Shell).

Desarrollado por
Ricardo Soto De Giorgis

PONTIFICIA
UNIVERSIDAD CATOLICA DE VALPARAISO

Escuela de Ingeniera
Informtica

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 comparacin 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 posicin %d,valor,i);
else printf(valor no encontrado);
}

Desarrollado por
Ricardo Soto De Giorgis

Escuela de Ingeniera
Informtica

ICI 241 Estructura de Datos

PONTIFICIA
UNIVERSIDAD CATOLICA DE VALPARAISO

Escuela de Ingeniera Informtica

Captulo 3 Ordenamiento y Bsqueda


3.2.2 Bsqueda binaria
Suponga que desea buscar el nombre de una persona en una gua telefnica,
normalmente no se buscara en forma secuencial. Sino que se buscara en la
primera o segunda mitad de la gua, una vez en esa mitad, se volvera a tantear
en una de sus dos submitades, y as sucesivamente se repitira 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 posicin %d,valor,i);
else printf(valor no encontrado);
}

Desarrollado por
Ricardo Soto De Giorgis

Escuela de Ingeniera
Informtica

ICI 241 Estructura de Datos

S-ar putea să vă placă și