TEMA 5: Problemas y Algoritmos importantes 
 
        En este apartado vamos a ver una serie de algoritmos de gran
importancia  en  esta  asignatura.  El  dominio  de  los  siguientes
algoritmos nos da  pie a enfrentarnos a una  serie de algoritmos más
complejos y cuyo código depende de aquellos.


5.1 Ordenación por selección.

+-Algoritmo Orden_selección
|
|   Constante entera n=...
|   Vector entero a(1..n)
|   Variable entera x,i,j,h,mayor
|
|   Escribir "Introduzca el vector a ordenar"
| +-Para h desde 1 hasta n hacer
| |   Leer a(h)
| +-Finpara
|
| +-Para k desde 1 hasta n-1 hacer
| |   mayor <- k
| | +-Para j desde k+1 hasta n hacer
| | | +-Si a(j)<a(i) entonces mayor <-j
| | | +-Finsi
| | +-Finpara
| |   x    <- a(j)
| |   a(j) <- a(i)
| |   a(i) <- x
| +-Finpara
|   Escribir a
+-Final


5.2 Búsqueda Secuencial o Lineal.

+-Algoritmo Busqueda_secuencial
|
|   Constante entera n=...
|   Vector entero a(1..n)
|   Variable entera x,i,j,h,mayor
|
|   Escribir "Introduzca el valor a buscar"
|   Leer x
|
|   k <- 0
| +-Repetir
| |   k <- k+1
| | +-Si a(k)=x entonces
| | |   Escribir "El dato: ";a;
| | |   "esta en la posición: ";k
| | +-Finsi
| +-Hasta que (k=n) or (a(k)=x)
+-Final


5.3 Búsqueda Dicotómica o Binaria.

+-Algoritmo Búsqueda_dicotómica
|
|   Constante entera n= ...
|   Vector de enteros a(1..n)
|   Variable entera x,i,j,m,h
|
|   Escribir "Introduzca el vector a ordenar"
| +-Para h desde 1 hasta n hacer
| |   Leer a(h)
| +-Finpara
|
|   Escribir "Introduzca el valor a buscar"
|   Leer x
|
|   i <- 1
|   j <- n
|
| +-Repetir
| |   m <-(i+j) div 2
| | +-Si x < a(m) entonces
| | |   j <- m-1
| | +-Sino
| | |   i <- m+1
| | +-Finsi
| +-Hasta que (a(m)=x or i>j)
|
| +-Si i>j entonces
| |   Escribir "El dato a buscar no se encuentra."
| +-Finsi
|
+-Final


5.4 Mezcla de ficheros Ordenados.

+-Algoritmo mezcla
|
| +-Registro estructurado r
| |   variable cadena clave
| |          ...
| +-Finregistro
|
|   Ficheros de r A,B,C
|   Variables enteras a,b
|
|   Abrir secuencial A,B,C
|   Iniciar lectura en A,B
|   Iniciar escritura en C
|
|   Leer (A,a)
|   Leer (B,b)
|
| +-Mientras (NO fin(A) AND NO fin(B)) hacer
| | +-Si a.clave < b.clave entonces
| | |   Escribir (C,a)
| | |   Leer (A,a)
| | +ÄSino
| | |   Escribir (C,b)
| | |   Leer (B,b)
| | +-Finsi
| +-Finmientras
|
| +-Mientras (NO fin(A)) hacer
| |   Escribir (C,a)
| |   Leer (A,a)
| +-Finmientras
|
| +-Mientras (NO fin(B)) hacer
| |   Escribir (C,b)
| |   Leer (B,b)
| +-Finmientras
|
|   Cerrar A,B,C
|
+-Final