Вы находитесь на странице: 1из 29

Algoritmos: Un enfoque prctico - Captulo V Franklin Arriola R. / Yuliana Juregui R.

Mtodos de ordenacin y bsqueda

La ordenacin y la bsqueda son dos procesos que frecuentemente se realizan para


resolver problemas por computadora.

Ordenar, significa reorganizar un conjunto de datos en una secuencia especfica.

La operacin de bsqueda para recuperar informacin normalmente se efecta


sobre elementos ordenados.

Formalmente se define la ordenacin de la siguiente manera:


Sea A una lista de N elementos:

A0, A1, A2,AN

Ordenar significa permutar estos elementos de tal forma que los mismos quedan de
acuerdo con una distribucin preestablecida.

Ascendentemente A0 <= A1 <= A2 <=, ... <= AN


Descendente A0 >= A1 >= A2 >=, ... >=AN

En el procesamiento de datos, a los mtodos de ordenacin se les clasifica en dos


categoras:

Ordenacin interna (ordenacin de vectores). En la ordenacin interna los


elementos del vector se encuentran en memoria principal
Ordenacin externa (ordenacin en archivos). En la ordenacin externa los
elementos del vector se encuentran en archivos almacenados en dispositivos de
almacenamiento secundario como discos, cintas, etctera.

Para nuestro caso, solo se trabajar con los mtodos de ordenacin interna, as
tenemos: mtodos de ordenacin por seleccin, mtodos de ordenacin por
comparacin intercambio y mtodos de ordenacin por insercin.

1. Mtodos de ordenacin por seleccin

Sea un vector por clasificar, para construir el vector final se extrae sucesivamente
los elementos del vector y se coloca adecuadamente segn dos tipos de mtodos:

Mtodo por seleccin de elementos


Una vez escogido una posicin en el vector final, se busca el elemento que debe de
ocuparlo: mtodo de seleccin simple.

Mtodo de seleccin por posicin


Una vez escogido el elemento se busca que posicin debe de ocupar en el vector
final: mtodo de conteo

1.1. Mtodo de ordenacin por seleccin simple

Principio: Sea A el vector con N elementos a clasificar en forma ascendente, se


busca el elemento mas pequeo del vector, empezando la bsqueda desde A[0]
hasta A[N-1], sea A[j] este elemento, entonces se pone A[j] en el lugar de A[0]
y A[0] en el lugar de A[j].

259 Sistema a Distancia


Algoritmos: Un enfoque prctico - Captulo V Franklin Arriola R. / Yuliana Juregui R.

Se busca despus el elemento mas pequeo del vector pero se empieza la


bsqueda a partir de A[1] hasta A[N], sea A[k] este elemento, se pone A[k] en
el lugar de A[1] y A[1] y en el lugar de A[k] y as sucesivamente.
Ejemplo:
Sea A el vector a clasificar en forma ascendente.

8 40 26 12 1 18 14
0 1 2 3 4 5 6

Primera pasada: Primer elemento A[0] = 8


El menor elemento desde A[0] hasta A[6] es A[4]=1, entonces cambiamos A[0]
con A[4].

1 40 26 12 8 18 14
0 1 2 3 4 5 6

Segunda pasada: Segundo elemento A[1] = 40


El menor elemento a partir de A[1] es A[4] = 8, entonces cambiamos A[1] con
A[4].

1 8 26 12 40 18 14
0 1 2 3 4 5 6

Tercera pasada: Tercer elemento A[2] = 26


El menor elemento a partir de A[2] es A[3] = 12, entonces cambiamos A[2] con
A[3].

1 8 12 26 40 18 14
0 1 2 3 4 5 6

Cuarta pasada: Cuarto elemento A[3] = 26


El menor elemento a partir de A[3] es A[6]=14, entonces cambiamos A[3] con
A[6].

1 8 12 14 40 18 26
0 1 2 3 4 5 6

Quinta pasada: Quinto elemento A[4] = 40


El menor elemento a partir de A[4] es A[5] = 18, entonces cambiamos A[4] con
A[5].

1 8 12 14 18 40 26
0 1 2 3 4 5 6

Sexta pasada: Sexto elemento A[5] = 40


El menor elemento a partir de A[5] es A[6] = 26, entonces cambiamos A[5] con
A[6].

1 8 12 14 18 26 40
0 1 2 3 4 5 6

El vector esta ordenado completamente en N-1 = 6 pasadas.

Algoritmo
Se tiene un vector de N elementos para clasificar, primero se escoge el menor
elemento del vector y se ubica en la posicin 0.

260 Sistema a Distancia


Algoritmos: Un enfoque prctico - Captulo V Franklin Arriola R. / Yuliana Juregui R.

Luego quedan N-1 elementos para clasificar de los cuales se evala el menor y
se pone en la posicin 1 y as sucesivamente hasta que quede un solo elemento
el cual se coloca en la ltima posicin del arreglo.

Mdulos que se utilizan:


Procedimiento ingresarVector (entero a[50], entero &n), permite ingresar
nmeros enteros al vector.
Procedimiento sortsimple (entero a[50] , entero n) controla los limites del
vector
Funcin posiminimo (entero a[50] , entero n, entero i) devuelve un valor
entero que representa la posicin del ndice mnimo
Procedimiento cambio (entero a[50] , entero i, entero j) permite el
intercambio de posiciones
Procedimiento imprimirVector (entero vector[50] , entero num) imprime el
vector ordenado

8 40 26 12 1 18 14 Cambio entre
Vector original posi
A[0] A[1] A[2] A[3] A[4] A[5] A[6] A[i] y A[posi]
Pri.Pasada i=0 1 40 26 12 8 18 14 4 A[0] y A[4]
Seg.Pasada i=1 1 8 26 12 40 18 14 4 A[1] y A[4]
Ter.Pasada i=2 1 8 12 26 40 18 14 3 A[2] y A[3]
Cut.Pasada i=3 1 8 12 14 40 18 26 6 A[3] y A[6]
Qui.Pasada i=4 1 8 12 14 18 40 26 5 A[4] y A[5]
Sex.Pasada i=5 1 8 12 14 18 26 40 6 A[5] y A[6]

Inicio
// Definir e inicializar variables y vectores
entero: n, a[50], b[50]
// Lectura de datos
ingresarVector (a, n)
// Proceso
sortsimple (a, n)
imprimirVector (a, n)
Fin

Procedimiento ingresarVector (entero a[50], entero &n)


// Definir variables
entero: i
Escribir (Ingresar cantidad de elementos del vector:)
Leer (n)
Desde (i  0) hasta (i < n) con incremento de 1 Hacer
Escribir (Ingresar elemento)
Leer (a[i])
Fin_desde
Fin_procedimiento

Procedimiento sortsimple (entero a[50] , entero n)


// Definir variables
entero: i, posi
i0
Desde (i  0) hasta ( i < n) con incremento 1 Hacer
posi  posiminimo (a, n, i)
cambio (a, i, posi)
Fin_desde
Fin_procedimiento

261 Sistema a Distancia


Algoritmos: Un enfoque prctico - Captulo V Franklin Arriola R. / Yuliana Juregui R.

Funcin posiminimo (entero a[50] , entero n, entero i)


// Definir e inicializar variables
entero: k, posi  0
ki
Mientras (i < n) Hacer
Si (a[i] < a[k]) entonces
k i
Fin_si
ii+1
Fin_mientras
retornar k
Fin_funcin

Procedimiento cambio (entero a[50] , entero i, entero j)


// Definir variable
entero: temp
temp  a[i]
a[i]  a[j]
a[j]  temp
Fin_procedimiento

Procedimiento imprimirVector (entero vector[50], entero num)


// Definir variable
entero: i
Desde (i  0) hasta (i < num) con incremento 1 Hacer
Escribir (vector[i])
Fin_desde
Fin_procedimiento

1.2. Mtodo de ordenacin por conteo

Principio: Dado un vector A con N elementos a clasificar en forma ascendente,


inicialmente todos los contadores son nulos. Se considera primer elemento A0,
se compara A0 con A1, si A0 es mayor que A1, se suma una unidad al contador
C0 asociado a A0, sino se suma una unidad al contador C1 asociado a A1, luego
se compara A2 con A0 y A1 segn el resultado de las comparaciones se
incrementan los contadores correspondientes a los elementos chequeados,
cuando todos los elementos han sido tratados de la misma manera, los
contadores indicaran el rango del elemento correspondiente.

Ejemplo:
Sea A el vector a clasificar en forma ascendente.

A0 A1 A2 A3 A4 A5 A6
8 40 26 12 1 18 14
0 1 2 3 4 5 6

Contadores C0 C1 C2 C3 C4 C5 C6 Asociados

1. C0 = C1 = C2 = C3 = C4 = C5 = C6 = 0
2. Primer elemento = 8
3. Segundo elemento = 40
Comparamos 40 con todos los anteriores, le sumamos 1 al contador
asociado del elemento mayor:
8 < 40 C1 = C1 + 1 = 1 (40 es el mayor, su contador asociado es C1)
4. Tercer elemento = 26

262 Sistema a Distancia


Algoritmos: Un enfoque prctico - Captulo V Franklin Arriola R. / Yuliana Juregui R.

Comparamos 26 con todos los anteriores, le sumamos 1 al contador


asociado del elemento mayor:
8 < 26 C2 = C2 + 1 = 1 (26 es el mayor, su contador asociado es C2)
40 > 26 C1 = C1 + 1 = 2 (40 es el mayor, su contador asociado es C1)
5. Cuarto elemento = 12
Comparamos 12 con todos los anteriores, le sumamos 1 al contador
asociado del elemento mayor
8 < 12 C3 = C3 + 1 = 1 (12 es el mayor, su contador asociado es C3)
40 > 12 C1 = C1 + 1 = 3 (40 es el mayor, su contador asociado es C1)
26 > 12 C2 = C2 + 1 = 2 (26 es el mayor, su contador asociado es C2)
6. Quinto elemento = 1
Comparamos 1 con todos los anteriores, le sumamos 1 al contador asociado
del elemento mayor
8>1 C0 = C0 + 1 = 1 (8 es el mayor, su contador asociado es C0)
40 > 1 C1 = C1 + 1 = 4 (40 es el mayor, su contador asociado es C1)
26 > 1 C2 = C2 + 1 = 3 (26 es el mayor, su contador asociado es C2)
12 > 1 C3 = C3 + 1 = 2 (12 es el mayor, su contador asociado es C3)
7. Sexto elemento = 18
Comparamos 18 con todos los anteriores, le sumamos 1 al contador
asociado del elemento mayor
8 < 18 C5 = C5 + 1 = 1 (18 es el mayor, su contador asociado es C5)
40 > 18 C1 = C1 + 1 = 5 (40 es el mayor, su contador asociado es C1)
26 > 18 C2 = C2 + 1 = 4 (26 es el mayor, su contador asociado es C2)
12 < 18 C5 = C5 + 1 = 2 (12 es el mayor, su contador asociado es C3)
1 < 18 C5 = C5 + 1 = 3 (15 es el mayor, su contador asociado es C5)
8. Sptimo elemento = 14
Comparamos 14 con todos los anteriores, le sumamos 1 al contador
asociado del elemento mayor
8 < 14 C6 = C6 + 1 = 1 (11 es el mayor, su contador asociado es C6)
40 > 14 C1 = C1 + 1 = 6 (40 es el mayor, su contador asociado es C1)
26 > 14 C2 = C2 + 1 = 5 (26 es el mayor, su contador asociado es C2)
12 < 14 C6 = C6 + 1 = 2 (14 es el mayor, su contador asociado es C6)
1 < 14 C6 = C6 + 1 = 3 (14 es el mayor, su contador asociado es C6)
18 > 14 C5 = C5 + 1 = 4 (18 es el mayor, su contador asociado es C5)

Se obtiene
C0 = 1
C1 = 6
C2 = 5
C3 = 2
C4 = 0
C5 = 4
C6 = 3

C0: indica un valor de 1, entonces el lugar del elemento A0 es la primera


posicin.
C1: indica un valor de 6, entonces el lugar del elemento A1 es la sexta posicin
Y as sucesivamente, obtenemos el archivo ordenado.

1 8 12 14 18 26 40
0 1 2 3 4 5 6

Mdulos que se utilizan:


Procedimiento ingresarVector(entero a[50], entero &n), permite ingresar
nmeros enteros al vector.
Procedimiento inicializarVector(entero c[50], entero n), permite inicializar en
cero los elementos del vector c.

263 Sistema a Distancia


Algoritmos: Un enfoque prctico - Captulo V Franklin Arriola R. / Yuliana Juregui R.

Procedimiento conteo(entero a[50] , entero c[50] , entero n) Lleva el avance


del ndice i, j.
Procedimiento cuentac(entero a[50] , entero c[50] , entero limitei, entero j)
Compara un elemento del vector A[j] con todos los anteriores desde cero
hasta limitei, donde limitei, j los da la funcin conteo, se repite la misma
operacin para todos sus elementos y se obtiene as el vector c
Procedimiento posicin (entero a[50] , entero c[50] , entero b[50],entero
n1) obtenemos el vector ordenado B, si el contenido de Ci indica un valor j,
el lugar del elemento Ai es la B[j] posicin del vector resultante
Procedimiento imprimirVector(entero b[50] , entero num) imprime el vector
desordenado y ordenado.

Inicio
// Definir e inicializar variables y vectores
entero: n1, a[50], b[50], c[50]
// Lectura de datos
ingresarVector (a, n)
inicializarVector (c, n)
// Proceso
conteo (a, c, n)
posicin (a, c, b, n)
Escribir ("Vector desordenado ")
imprimirVector (a, n)
Escribir ("Vector ordenado)
imprimirVector (b, n)
Fin

Procedimiento ingresarVector (entero a[50], entero &n)


// Definir variable
entero: i
Escribir (Ingresar cantidad de elementos del vector:)
Leer (n)
Desde (i  0) hasta (i < n) con incremento de 1 Hacer
Escribir (Ingresar elemento)
Leer (a[i])
Fin_desde
Fin_procedimiento

Procedimiento incializarVector (entero c[50], entero n)


// Definir variables
entero: i
Desde (i  0) hasta (i < n) con incremento de 1 Hacer
c[i]  0
Fin_desde
Fin_procedimiento

Procedimiento conteo (entero a[50] , entero c[50] , entero n)


// Definir variables
entero : i, j
i0
Mientras (i < n-1) Hacer
ji+1
cuentac (a, c, i, j)
ii+1
Fin_mientras
Fin_procedimiento

264 Sistema a Distancia


Algoritmos: Un enfoque prctico - Captulo V Franklin Arriola R. / Yuliana Juregui R.

Procedimiento cuentac (entero a[50] , entero c[50] , entero limitei, entero j)


// Definir variable
entero: i
i0
Mientras (i <= limitei) Hacer
Si (a[i] > a[j]) entonces
c[i]  c[i] + 1
Sino
c[j]  c[j] + 1
Fin_si
ii+1
Fin_mientras
Fin_procedimiento

Procedimiento posicion (entero a[50], entero c[50], entero b[50], entero n)


// Definir variables
entero: i, p
i0
Mientras (i < n) Hacer
p  c[i]
b[p]  a[i]
ii+1
Fin_mientras
Fin_procedimeinto

Procedimiento imprimirVector (entero b[50], entero num)


// Definir variable
entero: i
Desde (i  0) hasta (i < num) con incremento 1 Hacer
Escribir (b[i])
Fin_desde
Fin_procedimiento

2. Mtodos de ordenacin por Comparacin-Intercambio (C/I)

Se toman los elementos de dos en dos, se comparan y se intercambian si no estn


en el orden adecuado, este proceso se repite hasta que se ha analizado todos sus
elementos y ya no hay intercambios. Entre estos algoritmos se encuentran:

Mtodo de burbuja
Mtodo de shell
Mtodo Par-Impar

2.1. Mtodo de ordenacin en burbuja.

Principio: Recibe este nombre por que los elementos mayores burbujean
gradualmente (suben) hacia la parte superior del vector.
Sea A el vector con N elementos que se desea clasificar en forma ascendente,
para cada elemento se determina el mayor elemento de A y se guarda en la
ltima posicin, luego quedan N-1 elementos para clasificar y se guarda el
siguiente mayor en la posicin N-1 y as sucesivamente hasta que quede un solo
elemento que se guarda en la posicin cero.

265 Sistema a Distancia


Algoritmos: Un enfoque prctico - Captulo V Franklin Arriola R. / Yuliana Juregui R.

En la primera pasada, se efecta comparaciones a pares de elementos


adyacentes e intercambiarlos entre si hasta colocar el mayor elemento en la
ultima posicin.

En la segunda pasada, se realiza de nuevo comparaciones a pares sucesivos


adyacentes A[i] y A[i+1], pero se trata el vector con solamente N-1 elementos
puesto que el ultimo ya esta en su sitio.
Al cabo de N-1 pasadas el vector ya esta ordenado.
Ejemplo:
Sea A el vector a clasificar en forma ascendente

18 40 26 15 12 9 8
0 1 2 3 4 5 6

Primera Pasada:
A0 < A1 (18 < 40) No hay intercambio
A1 > A2 (40 > 26) Si hay intercambio
A2 > A3 (40 > 15) Si hay intercambio
A3 > A4 (40 > 12) Si hay intercambio
A4 > A5 (40 > 9 ) Si hay intercambio
A5 > A6 (40 > 8) Si hay intercambio

El vector queda:

18 26 15 12 9 8 40
0 1 2 3 4 5 6

Segunda Pasada:
A0 < A1 (18 < 26) No hay intercambio
A1 > A2 (26 > 15) Si hay intercambio
A2 > A3 (26 > 12) Si hay intercambio
A3 > A4 (26 > 9) Si hay intercambio
A4 > A5 (26 > 8) Si hay intercambio

El vector queda:

18 15 12 9 8 26 40
0 1 2 3 4 5 6

Tercera Pasada:
A0 > A1 (18 > 15) Si hay intercambio
A1 > A2 (18 > 12) Si hay intercambio
A2 > A3 (18 > 9) Si hay intercambio
A3 > A4 (18 > 8) Si hay intercambio

El vector queda:

15 12 9 8 18 26 40
0 1 2 3 4 5 6

Cuarta Pasada:
A0 > A 1 (15 > 12) Si hay intercambio
A1 > A 2 (15 > 9) Si hay intercambio
A2 < A 3 (15 > 8) Si hay intercambio

El vector queda:

266 Sistema a Distancia


Algoritmos: Un enfoque prctico - Captulo V Franklin Arriola R. / Yuliana Juregui R.

12 9 8 15 18 26 40
0 1 2 3 4 5 6

Quinta Pasada:
A0 > A1 (12 > 9) Si hay intercambio
A1 > A2 (12 > 8) Si hay intercambio

El vector queda:

9 8 12 15 18 26 40
0 1 2 3 4 5 6

Sexta Pasada:
A0 > A1 (9 > 8) Si hay intercambio

El vector queda:

8 9 12 15 18 26 40
0 1 2 3 4 5 6

Tabla que muestra las diferentes pasadas por el mtodo de burbuja

Vector original 18 40 26 15 12 9 8
Primera pasada 18 26 15 12 9 8 40
Segunda pasada 18 15 12 9 8 26 40
Tercera pasada 15 12 9 8 18 26 40
Cuarta pasada 12 9 8 15 18 26 40
Quinta pasada 9 8 12 15 18 26 40
Sexta pasada 8 9 12 15 18 26 40

Mdulos que se utilizan:


Procedimiento ingresarVector(entero a[50], entero &n), permite ingresar
nmeros enteros al vector.
Procedimiento burbuja (entero a[50], entero n), lleva el avance del ndice
actual k donde guardamos el mayor elemento empezando desde la ltima
posicin hasta la primera posicin.
Procedimiento desplaza (entero a[50] , entero k), halla el mayor elemento
haciendo comparaciones a pares sucesivos llevando los elementos mas
grandes hacia la derecha, empezando desde 0 hasta k, donde el ndice k lo
da burbuja.
Procedimiento imprimirVector (entero vector[50], entero num), imprime el
vector ordenado.

Inicio
// Definir e inicializar variables y vectores
entero: n, a[50]
// Lectura de datos
ingresarVector (a, n)
// Proceso
burbuja (a, n)
imprimirVector (a, n)
Fin

Procedimiento ingresarVector (entero a[50], entero &n)


// Definir variables
entero: i

267 Sistema a Distancia


Algoritmos: Un enfoque prctico - Captulo V Franklin Arriola R. / Yuliana Juregui R.

Escribir (Ingresar cantidad de elementos del vector:)


Leer (n)
Desde (i  0) hasta (i < n) con incremento de 1 Hacer
Escribir (Ingresar elemento)
Leer (a[i])
Fin_desde
Fin_procedimiento

Procedimiento burbuja (entero a[50], entero n)


// Definir variable
entero: k
kn1
Mientras (k >= 0) Hacer
desplaza (a, k)
k  k-1
Fin_mientras
Fin_procedimeinto

Procedimiento desplaza (entero a[50] , entero k)


// Declarar e inicializar variables
entero: i, j, temp
i0
Mientras (i < k) Hacer
ji+1
Si (a[i]>a[j]) entonces
temp  a[i]
a[i]  a[j]
a[j]  temp
Fin_si
ii+1
Fin_mientras
Fin_procedimiento

Procedimiento imprimirVector (entero vector [50], entero num)


// Definir variable
entero: i
Desde (i  0) hasta (i < num) con incremento 1 Hacer
Escribir (vector[i])
Fin_desde
Fin_procedimiento

2.2. Mtodo de ordenacin shell.

Principio: Sea A el vector a clasificar en forma ascendente.


Efectuamos una serie de C/I en el vector A, de la siguiente manera:
Comparamos A[0] con A[1] si A[0] es menor que A[1], esta bien ordenado, sino
intercambiamos
Comparamos A[1] con A[2] si A[1] es menor que A[2], esta bien ordenado, sino
intercambiamos y regresamos atrs comparando A[0] con A[1], si es menor
regresamos al punto donde fue interrumpido, sino intercambiamos y
regresamos al punto de interrupcin
Despus de esta fase los tres primeros elementos estn clasificados.
Seguimos el tratamiento efectuamos una serie de C/I, cada vez que hemos
tenido que hacer un intercambio regresamos atrs para efectuar los C/I hasta
encontrar un para ordenado.

268 Sistema a Distancia


Algoritmos: Un enfoque prctico - Captulo V Franklin Arriola R. / Yuliana Juregui R.

Ejemplo:
Sea A el vector a clasificar en forma ascendente.

8 40 26 12 1 18 14
0 1 2 3 4 5 6
Para i =0

8 40 26 12 1 18 14 No hay Intercambio (8<40)


Para i = 1

8 26 40 12 1 18 14 Intercambio (40 y 26) se


regresa atrs

8 26 40 12 1 18 14 No hay Intercambio (8 < 26 )

Para i = 2

8 26 12 40 1 18 14 Intercambio (40 y 12) se


regresa atrs

8 12 26 40 1 18 14 Intercambio (26 y 12) se


regresa atrs

8 12 26 40 1 18 14 No hay Intercambio (8<12)

Para i = 3

8 12 26 1 40 18 14 Intercambio (40 y 1) se
regresa atrs

8 12 1 26 40 18 14 Intercambio (26 y 1) se
regresa atrs

8 1 12 26 40 18 14 Intercambio (12 y 1) se
Regresa atrs

1 8 12 26 40 18 14 Intercambio (8 y 1) se
Regresa atrs
Para i = 4

1 8 12 26 18 40 14 Intercambio (40 y 18) se


regresa atrs

1 8 12 26 18 40 14 Intercambio (26 y 18) se


regresa atrs

1 8 12 18 26 40 14 No hay Intercambio (12<18)

Para i = 5

1 8 12 18 26 14 40 Intercambio (40 y 14) se


regresa atrs

1 8 12 18 14 26 40 Intercambio (26 y 14) se


regresa atrs

269 Sistema a Distancia


Algoritmos: Un enfoque prctico - Captulo V Franklin Arriola R. / Yuliana Juregui R.

1 8 12 18 14 26 40 intercambio (18 y 14)

1 8 12 14 18 26 40 No hay intercambio (12 < 14)

Mdulos que se utilizan:


Procedimiento ingresarVector(entero a[50], entero &n), permite ingresar
nmeros enteros al vector.
Procedimiento sortShell(entero a[50], int num) lleva el avance del ndice
actual i donde comparamos cada elemento con su sucesor.
Procedimiento permuta(entero a[50], entero i, entero j) permite el
intercambio de posiciones.
Procedimiento retrocede(entero a[50], entero i) compara cada elemento
desde la posicin inicial hasta i-1
Procedimiento imprimirVector(entero a[50], entero num) imprime el vector
ordenado.

Inicio
// Definir e inicializar variables y vectores
entero: n, a[50]
// Lectura de datos
ingresarVector(a, n)
// Proceso
sortShell (a, n)
imprimirVector (a, n)
Fin

Procedimiento ingresarVector (entero a[50], entero &n)


// Definir variables
entero: i
Ecribir ("Ingresar cantidad de elementos del vector: ")
Leer (n)
Desde (i  0) Hasta (i < n) con incremento 1 Hacer
Escribir ("Ingresar elemento" )
Leer (a[i])
Fin_desde
Fin_procedimiento

Procedimiento sortShell(entero a[50] ,entero n1)


// Definir variables
entero: i, j
i 0
Mientras (i < n - 1) Hacer
j  i+1
Si (a[i] > a[j]) entonces
permuta (a, i, j)
retrocede (a, i)
Fin_si
i  i+1
Fin_mientras
Fin_procedimeinto

Procedimiento permuta (entero a[50] , entero i, entero j)


// Definir variables

270 Sistema a Distancia


Algoritmos: Un enfoque prctico - Captulo V Franklin Arriola R. / Yuliana Juregui R.

entero: temp
temp  a[i]
a[i]  a[j]
a[j]  temp
Fin_procedimiento

Procedimiento retrocede (entero a[50], entero i)


// Definir variables
entero: k, j
k  i-1
Mientras (k >= 0) Hacer
jk+1
Si (a[k] > a[j]) entonces
permute (a, k, j)
Sino
k  -1
kk1
Fin_si
Fin_mientras
Fin_procedimiento

Procedimiento imprimirVector (entero vector[50], entero num)


// Declarar e inicializar variables
entero: i
Desde (i  0) hasta (i < num) con incremento 1 Hacer
Escribir (vector[i])
Fin_desde
Fin_procedimiento

2.3. Mtodo de ordenacin par - impar

Principio: En este mtodo cada pasada sobre el vector se realiza en dos


etapas:

Primera etapa
Cada elemento de posicin impar es comparado con su sucesor y se
intercambian si el sucesor fuera menor.

Segunda etapa
Cada elemento de posicin par es comparado con su sucesor y se intercambia si
el sucesor fuera menor.
Las pasadas sobre el vector son repetidas hasta que en una pasada no se ha
realizado ningn intercambio.

Ejemplo:
Sea A el vector a clasificar en forma ascendente

8 40 26 12 1 18 14
0 1 2 3 4 5 6

Primera pasada:
Primera etapa: impares
A[1] > A[2] 40 > 26 intercambio (40 y 26)
A[3] > A[4] 12 > 1 intercambio (12 y 1)
A[5] > A[6] 18 > 14 intercambio (18 y 14)

271 Sistema a Distancia


Algoritmos: Un enfoque prctico - Captulo V Franklin Arriola R. / Yuliana Juregui R.

El vector queda

8 26 40 1 12 14 18
0 1 2 3 4 5 6

Segunda etapa: pares


A[0] < A[1] 8 < 26 No hay intercambio
A[2] > A[3] 40 > 1 intercambio (40 y 1)
A[4] < A[5] 12 < 14 No hay intercambio

8 26 1 40 12 14 18
0 1 2 3 4 5 6

En esta primera pasada ha habido permutaciones entonces se realiza una nueva


pasada al vector

Segunda pasada:
Primera etapa: impares
A[1] > A[2] 26 > 1 intercambio (26 y 1)
A[3] > A[4] 40 > 12 intercambio (40 y 12)
A[5] < A[6] 14 < 18 No hay intercambio

El vector queda

8 1 26 12 40 14 18
0 1 2 3 4 5 6

Segunda etapa: pares


A[0] > A[1] 8 >1 intercambio (8 y 1)
A[2] > A[3] 26 > 12 intercambio (26 y 12)
A[4] > A[5] 40 > 18 intercambio (40 y 12)

1 8 12 26 14 40 18
0 1 2 3 4 5 6

En esta segunda pasada ha habido permutaciones entonces se realiza una


nueva pasada al vector

Tercera pasada:
Primera etapa: impares
A[1] < A[2] 8 < 12 No hay intercambio
A[3] > A[4] 26 > 14 intercambio (26 y 14)
A[5] > A[6] 40 > 18 intercambio (40 y 18)

El vector queda

1 8 12 14 26 18 40
0 1 2 3 4 5 6

Segunda etapa: pares


A[0] < A[1] 1<8 No hay intercambio
A[2] < A[3] 12 < 14 No hay intercambio
A[4] > A[5] 26 > 18 intercambio (26 y 18)

1 8 12 14 18 26 40
0 1 2 3 4 5 6

272 Sistema a Distancia


Algoritmos: Un enfoque prctico - Captulo V Franklin Arriola R. / Yuliana Juregui R.

En esta tercera pasada ha habido permutaciones entonces se realiza una nueva


pasada al vector

Cuarta pasada:
Primera etapa: impares
A[1] < A[2] 8 < 12 No hay intercambio
A[3] > A[4] 14 < 18 No hay intercambio
A[5] < A[6] 26 < 40 No hay intercambio
El vector queda

1 8 12 14 18 26 40
0 1 2 3 4 5 6

Segunda etapa: pares


A[0] < A[1] 1<8 No hay intercambio
A[2] < A[3] 12 < 14 No hay intercambio
A[4] < A[5] 18 < 26 No hay intercambio

1 8 12 14 18 26 40
0 1 2 3 4 5 6

En esta etapa no se ha producido ningn intercambio y el vector queda


completamente ordenado.

Mdulos que se utilizan:


Procedimiento ingresarVector(entero a[50], entero &n), permite ingresar
nmeros enteros al vector.
Procedimiento sortParImpar (entero a[50], entero n) las pasadas en el
vector son repetidas hasta que no se realice ninguna permutacin.
Funcin par(entero a[50] , entero i, entero n), devuelve un valor que nos
indica si ha habido intercambio o no
Procedimiento permuta(entero a[50] , entero i, entero j), permite el
intercambio de posiciones
Procedimiento imprimirVector(entero a[50] , entero num), imprime el vector
ordenado

Inicio
// Definir e inicializar vectores
entero: n1 , a[50]
// Lectura de datos
ingresarVector (a, n)
// proceso
sortParImpar (a, n)
imprimirVector (a, n)
Fin

Procedimiento ingresarVector (entero a[50], entero &n)


// Definir variables
entero: i
Escribir (Ingresar cantidad de elementos del vector:)
Leer (n)
Desde (i  0) Hasta (i < n) con incremento 1 Hacer
Escribir (Ingresar elemento)
Leer (a[i])
Fin_desde
Fin_procedimiento

273 Sistema a Distancia


Algoritmos: Un enfoque prctico - Captulo V Franklin Arriola R. / Yuliana Juregui R.

Procedimiento sortParImpar (entero a[50], entero n)


// Definir variables
entero: sw1  0, sw2  0
Mientras (sw1=0 or sw2 = 0) Hacer
sw1  par (a, 0, n)
sw2  par (a, 1, n)
Fin_mientras
Fin_procedimiento

Funcin par (entero a[50], entero i, entero n) : entero


// Definir e inicializar variables
entero: k, j, sw  0
ki
Mientras (k < n-1) Hacer
jk+1
Si (a[k] > a[j]) entonces
permuta (a, k, j)
sw  1
Fin_si
K k + 2
Fin_mientras
Si (sw = 1) entonces
sw  0
Sino
sw 1
Fin_si
retornar sw
Fin_funcin

Procedimiento permuta (entero a[50] , entero i, entero j)


// Definir variable
entero: temp
temp  a[i]
a[i]  a[j]
a[j]  temp
Fin_procedimiento

Procedimiento imprimirVector (entero vector[50], entero num)


// Definir variable
entero: i
Desde (i  0) hasta (i < num) con incremento 1 Hacer
Escribir (vector[i])
Fin_desde
Fin_procedimiento

3. Mtodos de ordenacin por insercin

Cada elemento es insertado en la posicin adecuada con respecto al resto de


elementos ya ordenados. Entre estos algoritmos se encuentran:
Insercin con desplazamiento
Insercin binaria

3.1. Mtodo de ordenacin por insercin con desplazamiento


Principio: Sea A el vector con N elementos a clasificar en forma ascendente,
para un elemento de posicin i (i >=1) guardamos a[i] en una variable auxiliar

274 Sistema a Distancia


Algoritmos: Un enfoque prctico - Captulo V Franklin Arriola R. / Yuliana Juregui R.

(aux = a[i]) , aux busca su lugar en las posiciones anteriores, cuando lo


encuentra desplaza hacia la derecha los elementos restantes y coloca aux en la
posicin correspondiente.

8 40 26 12 1 18 14
0 1 2 3 4 5 6

En la primera pasada procesar 40


Guardamos 40 que es el elemento activo en una variable auxiliar, aux = 40.
Comparamos 40 con todos los anteriores.
Si A[0] < aux esta ordenado
8 < 40, el elemento 8 esta ordenado
El vector queda igual

8 40 26 12 1 18 14
0 1 2 3 4 5 6

En la segunda pasada procesar 26.


Guardamos 26 que es el elemento activo en una variable auxiliar, aux = 26
Comparamos 26 con todos los anteriores
8 < 26, el elemento 8 esta ordenado
40 > 26, entonces posicin =1
Desplazamos hacia la derecha(40) y ponemos aux en la posicin que le
corresponde
El vector queda:

8 26 40 12 1 18 14
0 1 2 3 4 5 6

En la tercera pasada procesar 12.


Guardamos 12 que es el elemento activo en una variable auxiliar, aux = 12
Comparamos 12 con todos los anteriores
8 < 12, el elemento 8 esta ordenado
26 > 12, entonces posicin = 1
Desplazamos hacia la derecha(26) y ponemos aux en la posicin que le
corresponde
El vector queda:

8 12 26 40 1 18 14
0 1 2 3 4 5 6

En la cuarta pasada procesar 1


Guardamos 1 que es el elemento activo en una variable auxiliar, aux = 1
Comparamos 1 con todos los anteriores
8 > 1, entonces posicin = 0
Desplazamos hacia la derecha(8) y ponemos aux en la posicin que le
corresponde
El vector queda:

1 8 12 26 40 18 14
0 1 2 3 4 5 6

En la quinta pasada procesar 18


Guardamos 18 que es el elemento activo en una variable auxiliar, aux = 18
Comparamos 18 con todos los anteriores
1 < 18, el elemento 1 esta ordenado
8 < 18, el elemento 8 esta ordenado

275 Sistema a Distancia


Algoritmos: Un enfoque prctico - Captulo V Franklin Arriola R. / Yuliana Juregui R.

12 < 18, el elemento 12 esta ordenado


26 > 18 entonces posicin = 3
Desplazamos hacia la derecha(26) y ponemos aux en la posicin que le
corresponde
El vector queda:
1 8 12 18 26 40 14
0 1 2 3 4 5 6

En la sexta pasada procesar 14


Guardamos 14 que es el elemento activo en una variable auxiliar, aux = 14
Comparamos 14 con todos los anteriores
1 < 14, el elemento 1 esta ordenado
8 < 14, el elemento 8 esta ordenado
12 < 14, el elemento 18 esta ordenado
18 > 14 entonces posicin = 3
Desplazamos hacia la derecha(18) y ponemos aux en la posicin que le
corresponde
El vector queda ordenado:

1 8 12 14 18 26 40
0 1 2 3 4 5 6

Mdulos que se utilizan:


Procedimiento ingresarVector(entero a[50], entero &n), permite ingresar
nmeros enteros al vector.
Procedimiento sortInsersion (entero a[50] , entero n), lleva el avance del
ndice actual i, j.
Funcin lugar(entero a[50] , entero j), se guarda en cada pasada el
elemento activo, donde comparamos A[j] con todos los anteriores desde
cero hasta j, para determinar el lugar.
Procedimiento desplaza(entero a[50], entero j, entero i), desplaza
posiciones hacia la derecha para ubicar el elemento guardado en la posicin
que le corresponde.
Procedimiento imprimirVector(entero vector[50], entero num), imprime el
vector ordenado.

Inicio
// Definir e inicializar variables y vectores
entero: n1, a[50]
// Lectura de datos
ingresarVector (a, n)
// proceso
sortInsersion (a, n)
// Salida de resultados
imprimirVector (a,n)
Fin

Procedimiento ingresarVector (entero a[50], entero &n)


// Definir variables
entero: i
Escribir (Ingresar cantidad de elementos del vector:)
Leer (n)
Desde (i  0) hasta (i < n) con incremento de 1 Hacer
Escribir (Ingresar elemento)
Leer (a[i])
Fin_desde
Fin_procedimiento

276 Sistema a Distancia


Algoritmos: Un enfoque prctico - Captulo V Franklin Arriola R. / Yuliana Juregui R.

Procedimiento sortInsersion (entero a[50], entero n)


// Definir e inicializar variables
entero: i, j 0, posi  0
i0
Mientras (i < n-1) Hacer
j  i+1
posi  lugar(a,j)
Si (posi != j) entonces //Si posi=j, esta bien ordenado no desplaza
desplaza (a, posi, j)
Fin_si
ii+1
Fin_mientras
Fin_procedimiento

Funcin lugar(entero a[50] , entero j) : entero


// Definir e inicializar variables
entero: i, posi  0, sw  0, aux
aux  a[j]
i 0
Mientras (i < j and sw = 0) Hacer
Si (a[i] > aux ) entonces
posi  i
sw  1
Fin_si
ii+1
Fin_mientras
Si (sw = 1) entonces
retornar posi
Sino
retornar j
Fin_si
Fin_funcin

Procedimiento desplaza (entero a[50] , entero i, entero j)


// Definir e inicializar variable
entero: aux  0
aux  a[j]
Mientras ( j > i) Hacer
a[j]  a[j-1]
jj1
Fin_mientras
a[i]  aux
Fin_procedimiento

Procedimiento imprimirVector (entero vector[50], entero num)


// Definir variable
entero: i
Desde (i  0) hasta (i < num) con incremento 1 Hacer
Escribir (vector[i])
Fin_desde
Fin_procedimiento

3.2. Mtodo de ordenacin por insercin binaria

La bsqueda binaria consiste:

277 Sistema a Distancia


Algoritmos: Un enfoque prctico - Captulo V Franklin Arriola R. / Yuliana Juregui R.

Guardamos el contenido del ndice actual de i en una variable auxiliar digamos


aux, dividimos el ndice actual de i en dos partes:
Hacemos inf = 0, sup = i, tomamos la parte entera del valor medio:
medio = (inf + sup) / 2
Comparamos aux con el contenido del valor medio.
Si aux >= a[medio] el lugar de insercin se encuentra en el extremo
derecho del intervalo para lo cual hacemos inf = medio + 1
Si aux < a[medio] el lugar de insercin se encuentra en el extremo izquierdo
del intervalo para lo cual hacemos sup = medio
Continua la bsqueda del lugar de insercin mientras inf sea menor que sup.
Desplazamos elementos a partir de posicin de insercin.
Colocar aux en la posicin de insercin.

Entonces la bsqueda binaria consiste en localizar el lugar de insercin,


desplazamos elementos y luego insertar.

Sea A el vector a clasificar en forma ascendente:

8 40 26 12 1 18 14
0 1 2 3 4 5 6

En la primera pasada
i=0
Guardamos 40 que es el elemento activo en una variable auxiliar, aux = 40
Debemos comparar 40 con los anteriores (mientras inf < sup), para lo cual:
inf  0, sup  1, m  (0 + 1) / 2 = 0
Si aux >= A[0] entonces inf = m + 1 = 1
Salimos del proceso repetitivo ya que no se cumple inf < sup (1 < 1)
No podemos desplazar ya que sup es mayor que i
El elemento 8 esta ordenado, el vector queda igual

8 40 26 12 1 18 14
0 1 2 3 4 5 6

En la segunda pasada
i=1
Guardamos 26 que es el elemento activo en una variable auxiliar, aux = 26
Debemos comparar 26 con los anteriores (mientras inf < sup), para lo cual:
inf  0, sup  2, m  (0 + 2) / 2 = 1
Si aux >= A[1] (no se cumple la condicin) sup = m = 1
Repetimos otra vez el proceso repetitivo ya que inf < sup (0<1)
inf  0, sup  1, m  (0 + 1) / 2 = 0
Si aux >= A[0] entonces inf = m + 1 = 1
Salimos del proceso repetitivo ya que no se cumple inf < sup (1<1)

Desplazamos hacia la derecha a partir de la posicin sup = 1 hasta el ndice


activo (i = 2) y luego colocamos aux, en la posicin correspondiente.

El vector queda:

8 26 40 12 1 18 14
0 1 2 3 4 5 6

En la tercera pasada
i=3

278 Sistema a Distancia


Algoritmos: Un enfoque prctico - Captulo V Franklin Arriola R. / Yuliana Juregui R.

Guardamos 12 que es el elemento activo en una variable auxiliar, aux = 12


Debemos comparar 12 con los anteriores (mientras inf < sup), para lo cual:
inf  0, sup  3, m  (0 + 3) / 2 = 1
Si aux >= A[1] (no se cumple la condicin) sup = m = 1
Repetimos otra vez el proceso repetitivo ya que inf < sup (0 < 1)
inf  0, sup  1, m  (0 + 1) / 2 = 0
Si aux >= A[0] (se cumple la condicin) entonces inf = m + 1 = 1
Salimos del proceso repetitivo ya que no se cumple inf < sup (1 < 1)

Desplazamos hacia la derecha a partir de la posicin sup = 1 hasta el ndice


activo (i=3) y luego colocamos aux, en la posicin correspondiente.
El vector queda:

8 12 26 40 1 18 14
0 1 2 3 4 5 6

En la cuarta pasada
i=4
Guardamos 1 que es el elemento activo en una variable auxiliar, aux = 1.
Debemos comparar 1 con los anteriores (mientras inf < sup), para lo cual:
inf  0, sup  4, m  (0 + 4) / 2 = 2
Si aux >=A[2] (no se cumple la condicin) sup = 2
Repetimos otra vez el proceso repetitivo ya que inf < sup (0 < 2)
inf  0, sup  2, m  (0 + 2) / 2 = 0
Si aux >=A[0] (no se cumple la condicin) sup = 0
Salimos del proceso repetitivo ya que no se cumple inf < sup (0 < 0)

Desplazamos hacia la derecha a partir de la posicin sup = 0 hasta el ndice


activo (i=4) y luego colocamos aux, en la posicin correspondiente.
El vector queda:

1 8 12 26 40 18 14
0 1 2 3 4 5 6

En la quinta pasada
i=5
Guardamos 18 que es el elemento activo en una variable auxiliar, aux = 18
Debemos comparar 18 con los anteriores (mientras inf < sup), para lo cual:
inf  0, sup  5, m  (0 + 5) / 2 = 2
Si aux >= A[2] (si cumple la condicin) inf = m + 1 = 3
Repetimos otra vez el proceso repetitivo ya que inf < sup (3 < 5)
inf  3, sup  5, m  (3 + 5) / 2 = 4
Si aux >= A[4] (no se cumple la condicin) sup = 4
Repetimos otra vez el proceso repetitivo ya que inf < sup (3 < 4)
inf  3, sup  4, m  (3 + 4) / 2 = 3
Si aux >= A[3] (no se cumple la condicin) sup = 3
Salimos del proceso repetitivo ya que no se cumple inf < sup (3 < 3)

Desplazamos hacia la derecha a partir de la posicin sup = 3 hasta el ndice


activo (i = 5) y luego colocamos aux, en la posicin correspondiente.
El vector queda:

1 8 12 18 26 40 14
0 1 2 3 4 5 6
En la sexta pasada
i=6
Guardamos 14 que es el elemento activo en una variable auxiliar, aux = 14.

279 Sistema a Distancia


Algoritmos: Un enfoque prctico - Captulo V Franklin Arriola R. / Yuliana Juregui R.

Debemos comparar 14 con los anteriores (mientras inf < sup), para lo cual:
inf  0, sup  6, m  (0 + 6) / 2 = 3
Si aux >=A[3] (no se cumple la condicin) sup = m = 3
Repetimos otra vez el proceso repetitivo ya que inf < sup (0 < 3)
inf  0, sup  3, m  (0 + 3) / 2 = 1
Si aux >=A[1] (si se cumple la condicin) inf = m + 1 = 2
Repetimos otra vez el proceso repetitivo ya que inf < sup (2 < 3)
inf  2, sup  3, m  (2 + 3) / 2 = 2
Si aux >= A[2] (si se cumple la condicin) inf = m + 1 = 3
Salimos del proceso repetitivo ya que no se cumple inf < sup (3 < 3)

Desplazamos hacia la derecha a partir de la posicin sup = 3 hasta el ndice


activo (i=6) y luego colocamos aux, en la posicin correspondiente.
El vector queda:

1 8 12 14 18 26 40
0 1 2 3 4 5 6

Tabla que muestra las diferentes pasadas por el mtodo de insercin binaria

i aux A[0] A[1] A[2] A[3] A[4] A[5] A[6]


1 40 8 40 26 12 1 18 14
2 26 8 26 40 12 1 18 14
3 12 8 12 26 40 1 18 14
4 1 1 8 12 26 40 18 14
5 18 1 8 12 18 26 40 14
6 14 1 8 12 14 18 26 40

Desplazamos hacia la derecha desde el ndice activo i hasta (sup+ 1) y luego


colocamos aux, en la posicin a[sup].

Inicio
// Definir e inicializar variables
entero: n, a[50]
// Lectura de datos
ingresarVector (a, n)
// Proceso
sortBinaria (a, n)
imprimirVector (a, n)
Fin

Procedimiento ingresarVector (entero a[50], entero &n)


// Definir variables
entero: i
Escribir (Ingresar cantidad de elementos del vector:)
Leer (n)
Desde (i  0) hasta (i < n) con incremento de 1 Hacer
Escribir (Ingresar elemento)
Leer (a[i])
Fin_desde
Fin_procedimiento

Procedimiento sortBinaria(entero a[50] , entero n)


// Definir variables
entero: i, aux, j, inf, sup, m
i1
Mientras (i < n) Hacer

280 Sistema a Distancia


Algoritmos: Un enfoque prctico - Captulo V Franklin Arriola R. / Yuliana Juregui R.

aux  a[i]
inf  0
sup  i
Mientras (inf < sup) Hacer
m  (inf + sup) / 2
Si (aux >= a[m]) entonces
inf  m + 1
Sino
sup  m
Fin_si
Fin_mientras
ji
Mientras (j >= sup +1) Hacer
a[j]  a[j-1];
j  j - 1;
Fin_mientras
a[sup]  aux
a[sup]  aux
ii+1
Fin_mientras
Fin_procedimiento

Procedimiento imprimirVector (entero vector[50], entero num)


// Definir variable
entero: i
Desde (i  0) hasta (i < num) con incremento 1 Hacer
Escribir (vector[i])
Fin_desde
Fin_procedimiento

4. Mtodos de bsqueda

Vivimos en un mundo desarrollado, automatizado y acelerado donde la informacin


representa un elemento de vital importancia, por lo tanto buscar y recuperar
informacin es ahora una necesidad. En la vida cotidiana se realizan tareas
esenciales: se busca nmeros telefnicos en un directorio, ofertas laborales en un
peridico, libros en una biblioteca, etc.

4.1. Bsqueda Secuencial

La bsqueda secuencial consiste en revisar elemento hasta encontrar el dato


buscado.
Cuando se habla de bsqueda en arreglos debe de distinguirse entre arreglos
desordenados y arreglos ordenados.

4.1.1. En arreglos desordenados

La bsqueda secuencial en arreglos desordenados consiste bsicamente, en


recorrer el arreglo de izquierda a derecha hasta que encuentre el elemento
buscado. Normalmente cuando una funcin de bsqueda concluya con xito,
interesa conocer si el elemento pertenece o no al vector.

Sea A el vector

281 Sistema a Distancia


Algoritmos: Un enfoque prctico - Captulo V Franklin Arriola R. / Yuliana Juregui R.

5 3 10 6 19 12 80 40 26

Elemento a buscar 40
Comparamos cada elemento del vector con la clave, como encuentra la clave
devuelve verdad, ya que 40 pertenece al vector.

Algoritmo
Para cada elemento del vector, determina si es igual al elemento buscado,
esta bsqueda es realizado por la funcin buscaVectorDesordenado, que
devuelve verdad si elemento pertenece al vector y falso si elemento no
pertenece al vector

Mdulos que se utilizan:


Procedimiento ingresarVector(entero a[50], entero &n), permite ingresar
nmeros enteros al vector.
Funcin buscaVectorDesordenado(entero a[50], entero n, entero ele),
devuelve verdad si elemento pertenece al vector y falso si elemento no
pertenece al vector.
Procedimiento imprimirVector(entero a[50], entero num), imprime el
vector ordenado.

Inicio
// Definir e inicializar variables y vectores
entero: n, ele, a[50]
boolean: z
// Lectura de datos
ingresarVector (a, n)
Escribir (Ingrese elemento a buscar )
Leer (ele)
// Imprimir
imprimirVector (a, n)
z  buscaVectorDesordenado (a, n1, ele)
Si (z) entonces
Escribir (Elemento se encuentra en el vector)
Sino
Escribir (Elemento no se encuentra en el vector)
Fin_si
Fin

Procedimiento ingresarVector (entero a[50], entero &n)


// Definir variables
entero: i
Escribir (Ingresar cantidad de elementos del vector:)
Leer (n)
Desde (i  0) hasta (i < n) con incremento de 1 Hacer
Escribir (Ingresar elemento)
Leer (a[i])
Fin_desde
Fin_procedimiento

Funcin buscaVectorDesordenado (entero a[50] , entero n, entero ele)


// Definir variables
entero: i
boolean: r
i0
Mientras (a[i] != ele and i < n) Hacer
ii+1

282 Sistema a Distancia


Algoritmos: Un enfoque prctico - Captulo V Franklin Arriola R. / Yuliana Juregui R.

Fin_mientras
r  (a[i] = ele)
retornar r
Fin_funcin

Procedimiento imprimirVector (entero vector[50], entero num)


// Definir variable
entero: i
Desde (i  0) hasta (i < num) con incremento 1 Hacer
Escribir (vector[i])
Fin_desde
Fin_procedimiento

4.1.2. En arreglos ordenados

Cuando el arreglo esta ordenado se impone la condicin para controlar la


bsqueda:
A[0] <= elemento a buscar <= A[N-1]
Si es falso el elemento no esta en el rango.

Sea A el vector

3 5 6 10 12 19 26 40 80 100

Elemento a buscar 40
Comparamos cada elemento del vector con el elemento a buscar, como
encuentra el elemento a buscar devuelve verdad, ya que 40 pertenece al
vector.

Algoritmo
Para cada elemento del vector a se determina si es igual al elemento
buscado, esta bsqueda es realizado por la funcin buscaVectorOrdenado,
que devuelve verdad si elemento pertenece al vector y falso si elemento no
pertenece al vector

Mdulos que se utilizan:


Procedimiento ingresarVector(entero a[50], entero &n), permite ingresar
nmeros enteros al vector.
Funcin buscaVectorOrdenado(entero a[50], entero n, entero ele),
devuelve verdad si elemento pertenece al vector y falso si elemento no
pertenece al vector.
Procedimiento imprimirVector(entero vector[50], entero num), imprime
el vector.

Inicio
// Definir e inicializar variables y vectores
entero: n, ele, a[50]
boolean: z
// Lectura de datos
ingresarVector (a, n)
Escribir ("Ingrese elemento a buscar ")
Leer (ele)
// Imprimir
imprimirVector (a, n)
z  buscaVectorOrdenado (a, n, ele)
Si (z) entonces

283 Sistema a Distancia


Algoritmos: Un enfoque prctico - Captulo V Franklin Arriola R. / Yuliana Juregui R.

Escribir (Elemento se encunetra en el vector)


Sino
Escribir (Elemento no se encunetra en el vector)
Fin_si
Fin

Procedimiento ingresarVector (entero a[50], entero &n)


// Definir variables
entero: i
Escribir (Ingresar cantidad de elementos del vector:)
Leer (n)
Desde (i  0) hasta (i < n) con incremento de 1 Hacer
Escribir (Ingresar elemento)
Leer (a[i])
Fin_desde
Fin_procedimiento

Funcin buscaVectorOrdenado (entero a[50] , entero n, entero ele) :


booleano
// Definir variables
entero: i
boolean: r
i0
Mientras (a[i] < ele and i < n) Hacer
ii+1
Fin_mientras
r  (a[i] = ele)
retornar r
Fin_funcin

Procedimiento imprimirVector (entero vector[50], entero num)


// Definir variable
entero: i
Desde (i  0) hasta (i < num) con incremento 1 Hacer
Escribir (vector[i])
Fin_desde
Fin_procedimiento

4.2. Bsqueda binaria

Consiste en dividir el intervalo de bsqueda en dos partes, comparando el


elemento buscado con el elemento medio del vector. En caso de que el
elemento a buscar sea mayor que el elemento medio, se continua la bsqueda
en la segunda mitad del vector; si por el contrario el elemento a buscar es
menor que el elemento medio, la bsqueda contina en la primera mitad del
vector, en ambos casos se redefinen los extremos del intervalo, disminuyendo
el espacio de bsqueda, repitiendo el proceso hasta que se encuentre el valor a
buscar o hasta que el elemento a buscar no se encuentre en el vector.

Hacemos inf = 0 y sup = n1 - 1


Para Calcular el medio:
medio = (inf + sup ) / 2
Si estamos en la primera mitad del vector hacemos sup = medio - 1
Si estamos en la segunda mitad del vector hacemos inf = medio + 1

Sea A el vector:

284 Sistema a Distancia


Algoritmos: Un enfoque prctico - Captulo V Franklin Arriola R. / Yuliana Juregui R.

3 5 6 10 12 19 26 40 80 100
0 1 2 3 4 5 6 7 8 9

inf medio sup

Elemento a buscar: 80
inf = 0
sup = 9
medio = (inf + sup) / 2 = (0 + 9) / 2 = 4.5 (se toma la parte entero),
a[4] =12 se divide el vector en dos partes

3 5 6 10 12 19 26 40 80 100
0 1 2 3 5 6 7 8 9

Como elemento buscado 80 es mayor que elemento central 12, la bsqueda


continua en la segunda mitad del vector.
inf = 5
sup = 9
medio = (inf + sup) / 2 = (5 + 9) / 2 = 7, a[7] = 40, se divide el vector en dos
partes.

19 26 40 80 100
5 6 8 9

Como elemento buscado 80 es mayor que elemento central 40, la bsqueda


continua en la segunda mitad del vector
inf = 8
sup = 9
medio = (inf + sup) / 2 = (8 + 9) / 2 = 8, a[8] = 80
Como 80 = a[8] la bsqueda acaba, devolviendo verdad, ya que 80 pertenece
al vector.

Algoritmo
Para cada elemento del vector a se determina si es igual al elemento buscado,
esta bsqueda es realizado por la funcin binario, que devuelve verdad si
elemento pertenece al vector y falso si elemento no pertenece al vector

Mdulos que se utilizan:


Funcin binario(entero a[50], entero num, entero clave), devuelve un
valor booleano de verdad si elemento pertenece al vector y falso en caso
contrario
Procedimiento imprimirVector(entero vector[50], entero num), imprime
el vector ordenado.

Inicio
// Definir e inicializar variables y vectores
entero: n, ele, a[50]
boolean: z
// Lectura de datos
ingresarVector (a, n)
Escribir (Ingrese elemento a buscar)
Leer (ele)
// Imprimir
imprimirVector (a, n)
z  buscaBinaria(a, n, ele)

285 Sistema a Distancia


Algoritmos: Un enfoque prctico - Captulo V Franklin Arriola R. / Yuliana Juregui R.

Si (z) entonces
Escribir (Elemento se encuntra en el vector)
Sino
Escribir (Elemento no se encunetra en el vector)
Fin_si
Fin
Procedimiento ingresarVector (entero a[50], entero &n)
// Definir variables
entero: i
Escribir (Ingresar cantidad de elementos del vector:)
Leer (n)
Desde (i  0) hasta (i < n) con incremento de 1 Hacer
Escribir (Ingresar elemento)
Leer (a[i])
Fin_desde
Fin_procedimiento

Funcin buscaBinaria (entero a[50], entero n, entero ele) : booleano


// Declarar e inicializar variables
entero: inf, sup, medio  0
boolean: recorre  falso, p  falso
inf  0
sup  n - 1
Si (ele >= a[0] and ele <= a[n-1]) entonces
recorre  verdad
Sino
recorre  falso
Fin_si
Mientras (recorre) Hacer
medio  (inf + sup) / 2
Si (ele > a[medio]) entonces
inf  medio + 1
Sino
sup  medio- 1
Fin_si
Si (inf <= sup and a[medio] != ele) entonces
recorre  verdad
Sino
recorre  falso
Fin_si
Fin_mientras
p  (a[medio] = ele)
retornar p
Fin_funcin

Procedimiento imprimirVector (entero vector[50], entero num)


// Definir variables
entero i
Desde (i  0) hasta (i < num) con incremento 1 Hacer
Escribir (vector[i])
Fin_desde
Fin_procedimiento

286 Sistema a Distancia


Algoritmos: Un enfoque prctico - Captulo V Franklin Arriola R. / Yuliana Juregui R.

Bibliografa

Libros
Leobardo Lpez, R., (2003), Programacin estructurada: un enfoque
algortmico, 2. Edicin, Editorial Alfaomega Mxico.
Cairo, Osvaldo, (2000), Metodologa de la Programacin: Algoritmos,
Diagramas de Flujo y Programas, Computec, Mxico.
Cairo, Osvaldo y Silvia Guardati, (2002), Estructura de Datos. Mc Graw-Hill,
Mxico.
Ceballos, Francisco, Javier, (2002), Java 2 Curso de programacin.
Alfaomega.
Joyanes, Luis y otros, (2002), Java 2 Manual de programacin, Mc Graw-Hill,
Mxico.
Schildt, Hebert, (2002), Fundamentos de programacin. Mc Graw Hill.
Peterson, James y otros, (2003), Sistemas Operativos conceptos
fundamentales, Editorial Addison, Barcelona Espaa.
Fuster Sabater, Amparo y otros, (2004), Tcnicas Criptogrficas de proteccin
de Datos, Alfaomega, Mxico.

Enlaces

http://ieslospedroches.seinforma.net/moodle/file.php/5/Pseudocodigo_parte_1.pdf
http://www.unizar.es/ttm/2004-05/Algoritmos.pdf
http://ing.utalca.cl/~fmeza/cursos/2005/cyp/algoritmos2.pdf
http://www.viajayconoce.com/aulaenlinea/

287 Sistema a Distancia

Вам также может понравиться