Documentos de Académico
Documentos de Profesional
Documentos de Cultura
• Los elementos a buscar tienen una estructura de registro y la búsqueda se realiza sobre la llave del
mismo.
2. Entradas:
(a) Arreglo (ent a[ ]), que contiene todos los elementos y donde se realizará la búsqueda.
(b) El elemento a buscar (ent x).
(c) El número de datos contenidos en el arreglo (ent N).
3. Salida: El algoritmo regresa un entero que representa el ı́ndice del elemento encontrado o -1 si el
elemento no fue encontrado.
5. Algoritmo refinado
ent func busqueda sec(ent a[ ], ent x, ent N)
ent i;
comienza
i=0;
mientras(i < N y a[i] 6= x) haz
1
i=i+1
si(i == N-1) entonces
regresa -1;
otro
regresa i;
termina
2. Entradas:
(a) Arreglo (ent a[ ]), que contiene todos los elementos y donde se realizará la búsqueda.
(b) El elemento a buscar (ent x).
(c) El lı́mite izquierdo (ent izq) dentro del arreglo, a partir de donde se realizará la búsqueda en
cada llamada recursiva.
(d) El lı́mite derecho (ent der) dentro del arreglo, que define el lı́mite hasta donde se puede realizar
la búsqueda en una llamada recursiva.
3. Salida: El algoritmo regresa un entero que representa el ı́ndice del elemento encontrado o -1 si el
elemento no fue encontrado.
5. Algoritmo refinado
ent func busqueda bin(ent a[ ], ent x, ent izq, ent der)
comienza
si(izq ≤ der) entonces
comienza
mitad=(izq+der)/2;
si(a[mitad]==x) entonces
regresa mitad;
otro si(a[mitad] > x) entonces
regresa busqueda bin(a, x, izq, mitad-1);
otro;
regresa busqueda bin(a, x, mitad+1, der);
termina
otro;
regresa -1;
termina
2
1.2 Ordenamiento
Los algoritmos de ordenamiento planteados en esta sección, consideran lo siguiente:
1. El ordenamiento se realiza en la memoria de la computadora: ordenamiento interno
2. Los datos a ordenar se encuentran almacenados en un arreglo a[ ], con N datos
3. Los elementos a ordenar tienen una estructura de registro y la búsqueda se realiza sobre la llave del
mismo, considerándola como entero.
4. El ordenamiento se realiza sobre el mismo espacio en memoria (a[ ], excepto el de ordenamiento por
intercalación, que requiere de un arreglo auxiliar.)
3
termina;
hasta (limite==0) o (indicador==falso);
termina
3. Entradas
6. Algoritmo refinado
proc ord por insercion(ent a[ ], ent N)
ent i, j, auxiliar;
bool indicador;
comienza
para i=1 hasta N-1 haz;
comienza
indicador = verdadero;
auxiliar=a[i];
j=i;
mientras indicador haz;
comienza
si j==0 entonces
indicador=falso;
otro si auxiliar < a[j-1] entonces
comienza
a[j]=a[j-1];
j=j-1;
termina
otro
indicador=falso;
termina
a[j]=auxiliar;
termina
termina
4
1.2.3 Ordenamiento por Intercalación (Merge Sort).
1. Descripción. Se trata de un algoritmo recursivo del tipo “divide y vencerás”. El arreglo de entrada
se divide a la mitad y se invoca a si mismo para ordenar por intercalación las dos mitades resul-
tantes; cuando las dos mitades han quedado ordenadas se invoca a un procedimiento para intercalarlas
almacenando el resultado en un arreglo temporal y regresándolo en el arreglo original.
3. Entradas:
6. Algoritmo refinado
proc ord por intercalacion(ent a[ ], ent atemp[ ], ent izq, ent der)
ent mitad;
comienza
si izq < der entonces
comienza
mitad=(izq + der)/2;
ord por intercalacion(a, atemp, izq, mitad);
ord por intercalacion(a, atemp, mitad+1, der);
intercalar (a, atemp, izq, mitad+1, der);
termina
termina
3. Entradas:
5
(a) Arreglo (ent a[ ]), que contiene todos los elementos a ordenar.
(b) El lı́mite izquierdo (ent izq) dentro del arreglo, a partir de donde se realizará el ordenamiento.
(c) El lı́mite derecho (ent der) dentro del arreglo, que define el lı́mite hasta donde se puede realizará
el ordenamiento.
4. Salida: el arreglo a[ ] con sus elementos ordenados.
5. Algoritmo en lenguaje natural:
(a) Se selecciona algún elemento del arreglo a[ ] como pivote.
(b) Se recorre el arreglo desde la izquierda y mientras el elemento en turno sea menor que el pivote
se continua el recorrido. El recorrido se detiene cuando el elemento en turno es mayor o igual al
pivote.
(c) Se recorre el arreglo desde la derecha y mientras el elemento en turno sea mayor que el pivote
se continua el recorrido. El recorrido se detiene cuando el elemento en turno es menor o igual al
pivote.
(d) Si no se cruzaron los recorridos, se intercambian los elementos que se encontraban en turno en los
recorridos anteriores.
(e) Se repite el proceso desde el paso 5b, a partir de la detención de los recorridos, hasta que los
recorridos se cruzan. Con esto se garantiza que todos los elemento de la izquierda del pivote son
menores que éste y todos los elementos a la derecha son mayores al pivote.
(f) Si existen elementos a la izquierda del pivote, se ordenan invocando recursivamente a
ord rapido().
(g) Si existen elementos a la derecha del pivote, se ordenan invocando recursivamente a ord rapido().
6. Algoritmo refinado:
proc ord rapido(ent a[ ], ent izq, ent der)
ent i, j, auxiliar, pivote;
comienza
i=izq;
j=der;
pivote=a[(izq+der)/2]; /* la elección puede ser diferente */
repite
comienza
mientras a[i] < pivote haz;
i=i+1;
mientras a[j] > pivote haz;
j=j-1;
si i < j entonces
comienza
auxiliar=a[i];
a[i]=a[j];
a[j]=auxiliar;
i=i+1;
j=j-1;
termina
termina
hasta i > j;
si izq < j entonces
ord rapido(a,izq,j);
si i < der entonces
ord rapido(a,i,der);
termina