Академический Документы
Профессиональный Документы
Культура Документы
Ordenar significa permutar estos elementos de tal forma que los mismos quedan de
acuerdo con una distribucin preestablecida.
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.
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:
8 40 26 12 1 18 14
0 1 2 3 4 5 6
1 40 26 12 8 18 14
0 1 2 3 4 5 6
1 8 26 12 40 18 14
0 1 2 3 4 5 6
1 8 12 26 40 18 14
0 1 2 3 4 5 6
1 8 12 14 40 18 26
0 1 2 3 4 5 6
1 8 12 14 18 40 26
0 1 2 3 4 5 6
1 8 12 14 18 26 40
0 1 2 3 4 5 6
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.
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.
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
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
Se obtiene
C0 = 1
C1 = 6
C2 = 5
C3 = 2
C4 = 0
C5 = 4
C6 = 3
1 8 12 14 18 26 40
0 1 2 3 4 5 6
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
Mtodo de burbuja
Mtodo de shell
Mtodo Par-Impar
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.
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:
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
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
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
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
Para i = 2
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
Para i = 5
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
entero: temp
temp a[i]
a[i] a[j]
a[j] temp
Fin_procedimiento
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)
El vector queda
8 26 40 1 12 14 18
0 1 2 3 4 5 6
8 26 1 40 12 14 18
0 1 2 3 4 5 6
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
1 8 12 26 14 40 18
0 1 2 3 4 5 6
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
1 8 12 14 18 26 40
0 1 2 3 4 5 6
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
1 8 12 14 18 26 40
0 1 2 3 4 5 6
Inicio
// Definir e inicializar vectores
entero: n1 , a[50]
// Lectura de datos
ingresarVector (a, n)
// proceso
sortParImpar (a, n)
imprimirVector (a, n)
Fin
8 40 26 12 1 18 14
0 1 2 3 4 5 6
8 40 26 12 1 18 14
0 1 2 3 4 5 6
8 26 40 12 1 18 14
0 1 2 3 4 5 6
8 12 26 40 1 18 14
0 1 2 3 4 5 6
1 8 12 26 40 18 14
0 1 2 3 4 5 6
1 8 12 14 18 26 40
0 1 2 3 4 5 6
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
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)
El vector queda:
8 26 40 12 1 18 14
0 1 2 3 4 5 6
En la tercera pasada
i=3
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)
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)
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.
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)
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
Inicio
// Definir e inicializar variables
entero: n, a[50]
// Lectura de datos
ingresarVector (a, n)
// Proceso
sortBinaria (a, n)
imprimirVector (a, n)
Fin
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
4. Mtodos de bsqueda
Sea A el vector
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
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
Fin_mientras
r (a[i] = ele)
retornar r
Fin_funcin
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
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
Sea A el vector:
3 5 6 10 12 19 26 40 80 100
0 1 2 3 4 5 6 7 8 9
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
19 26 40 80 100
5 6 8 9
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
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)
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
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/