Beruflich Dokumente
Kultur Dokumente
ASIGNATURA: Algoritmos
Autor:
Escobar Fernanda
ALGORITMOS
1.1 Cul es la diferencia entre ordenacin por intercambio y ordenacin por el mtodo de la burbuja?
El mtodo de la burbuja funciona revisando cada elemento de la lista que va a ser ordenada con el siguiente,
intercambindolos de posicin si estn en el orden equivocado, y el mtodo por intercambio se basa en la lectura
sucesiva en la lista a ordenar comparando el elemento inferior de la lista con los restantes y efectuando intercambio de
posiciones cuando el orden resultante de la comparacin no sea el correcto
1.2Se desea eliminar todos los nmeros duplicados de una lista o vector (array) .Por ejemplo,si el array toma los
valores
4
11
11
Ha de cambiarse a
4
11
1.3 Escribir una funcin que elimine todos los elementos duplicados de un array
for (i=0;i<10;i++) {
cont=0;
num=v_original[i];
v_aux[j]=num;
j++;
for (k=0;k<10;k++)
if ( v_aux[k] == num )
cont++;
if ( cont == 1 )
{
v_final[z]=num;
z++;
}
(n)
(n)
(n)
(1)
Escribir una funcin que elimine los elementos duplicados de un vector ordenado. cul es la eficiencia de esta
ALGORITMOS
funcin ? comparar la eficiencia con la correspondiente a la funcin del ejercicio anterior.
//REALIZA LA ORDENACION
for(i=0; i<n; i++)
{
for(j=i+1; j<n; j++)
{
if(A[i]>A[j])
{
aux=A[j];
A[j]=A[i];
A[i]=aux;
}
}
}
//ELIMINA REPETIDOS
for(i=0; i<n; i++)
{
for(j=i+1; j < n; j++)
(n)
{
if(A[i]==A[j])
(n)
{
for(int k=j; k<n-1; k++)
(n-1)
{
A[k] = A[k+1];
}
n--;
i--; //Necesario dar una vuelta atras
}
}
}
(n)
= 3n + i + T (n-i)
T(n)=
3n + 1
= 3n + 2
= 3n + 3
= 3n + 4
= 3n + n-1 = 4n+1
ALGORITMOS
T(n) es O(n)
La ms eficiente para eliminar los nmeros duplicados seria la frmula del primer ejercicio ya que al no tener que ordenar los elementos ahorrara un
espacio de memoria al correr el programa.
1.4 Un vector contiene los elementos mostrados a continuacin. Los primeros dos elementos se han ordenado utilizando un algoritmo de
insercin Cul ser el valor de los elementos del vector despus de tres pasadas ms del algoritmo?
3 13 8 25 45 23 98 58
3 13 8 25 45 23 98 58
3 13 8 25 45 23 98 58
3 13 8 25 23 45 98 58
21
32 56 92
21
47
32
56 92
47
Primera pasada
21 32 56 92
Segunda pasada
3 21
47
32 56 92
1.7 Un array contiene los elementos indicados ms abajo. Utilizando el algoritmo de ordenacin Shell encuentre las pasadas
y los intercambios que se realizan para su ordenacin.
8 43
recorrido
1
2
3
4
5
6
7
17
40 16 18
salto
4
4
4
2
2
1
1
97
11
intercambios
(43,16);(11,40);(43,7)
(16,7);
------(6,6);(17,11);(43,97)
---------(8,6);(7,11);(16,17);(40,43)
(8,7)
lista
8 16 17 6 11 7
8 7 17 6 11 16
8 7 17 6 11 16
8 6 11 7 17 16
8 6 11 7 17 16
6 8 7 11 16 17
6 7 8 11 16 17
18
18
18
18
18
18
18
97
97
97
43
43
40
40
40
40
40
40
40
43
43
43
43
43
97
97
97
97
para su ordenacin.
8 43
17
40 16 18
97
11
Elemento pivote 16
Sublista izquierda1 (elementos menores que 16)
8 6 11 7
ALGORITMOS
43 40 18 97
8 6 7
Elemento pivote 7
Sublista izquierda
8 11
43 40 97
Elemnento pivote 43
40 43 97
18 40 43 97
1.9 Un array de registros se quiere ordenar segn el campo fecha de nacimiento. Dicho campo consta de tres subcampos dia
mes y ao de 2.2 y 4 digitos respectivamente. Adaptar el metodo de ordenacion radixsort a esta ordenacion
primero ordenariamos segn el ao, dependiendo de cada ao hacer subconjuntos por ejemplo del ao 1992 obtener todas las fechas
de nacimiento que se dieron en dicho ao luego rrecurrimos a ordenar segn el mes,al ya tener ordenados el ao y el mes hacemos
otro subconjunto segn el mes por ejemplo 08 de este mes procedemos a ordenar segn el dia y asi ya obtendriamos ordenadas las
fechas.
1.10 Un arra contiene los elementos indicados abajo. Utilizando un algoritmo de busqueda binaria trazar las etapas
necesarias para encontrar el numero 88.
8 13 17 26 44 56 88 97
El elemento central es el 26 qu esta en la posicion a[03] como el 88 es mayor que el 26 procedemos a hacer la busqueda binaria en la
mitad superior del conjunto de datos de la lista es decir en la lista:
44 56 88 97
Ahora el elemento central de esta sublista es a[5] 56 el valor bbuscado es mayor que 56 y, por consiguiente, la busqueda continua el la
mitad superior de la lista actual es decir:
88 97
ALGORITMOS
El elemento central de esta lista es a[6] 88 y este es el elemento buscado. La busqueda binaria se termina aqu.
88
1.10 Escribir la funcion de ordenacion coreespondiente al metodo de radixsort para poner en ordenalfabetico una lista de n
nombres
for(i=0; i<10; i++)
{
cout<< i+1 << " Introduce nombre: ";
cin>> nombre[i];
}
for(i=0; i<9; i++)
for(j=i+1; j<10; j++)
if(strcmp(nombre[i], nombre[j]) > 0)
{
strcpy(aux, nombre[i]);
strcpy(nombre[i], nombre[j]);
strcpy(nombre[j], aux);
}
for(i=0; i<10; i++)
cout<<endl<< nombre[i];
return 0;
}
Escribir una funcin de bsqueda binaria aplicado a un array ordenado en modo descendente
IntbsquedaBin(int lista[], int n, int clave)
{
int central, bajo, alto ;
intvalorCentral ;
bajo=0 ;
alto=n-1;
while (bajo <= alto)
{
central = (bajo + alto)/2;
valorCentral = lista[central];
if (clave == valorCentral)
return central;
else
if (clave < valor central)
ALGORITMOS
alto = central + 1;
/* ir a la sublista superior */
else
bajo = central 1;
/* ir a siblista inferior */
}
return -1
/*elemento no encontrado*/
Supongamos que tenemos una secuencia de n nmeros que deben ser clasificados:
1. Utilizar el mtodo Shell para determinar cuntas comparaciones y cuantos intercambios se requieren para
clasificar la secuencia si:
Ya est clasificado
Est en orden inverso
2. Repetir el paso 1 para el mtodo quicksort
8 43
17
40 16 18
97
11
6 7 8 11 16 17 18 40 43 97
Entonces al aplicar el mtodo Shell para ordenarla tendramos:
recorrido
1
2
3
salto
4
2
1
intercambios
---------------------------------------------------------------------------
lista
6 7 8 11 16 17 18 40 43 97
6 7 8 11 16 17 18 40 43 97
6 7 8 11 16 17 18 40 43 97
recorrido
1
2
3
4
5
6
salto
4
4
4
4
2
1
intercambios
(97,17);(43,16);(40,11);(18,89)
(97,7);(43,6)
(17,7);(16,6)
---------------------------(6,7);(8,11);(17,16);(40,18);(43,97)
lista
17 16 11
17 16 11
7 6 11 8
7 6 11 8
7 6 11 8
6 7 8 11
8 97 43 40 18 7 6
8 7 6 40 18 97 43
17 16 40 18 97 43
17 16 40 18 97 43
17 16 40 18 97 43
16 17 18 40 43 97
16 17 18 40 43 97
Lista ordenada
6 7 8 11 16 17 18 40 43 97
97 43 40 18 17 16 11 8 7 6
ALGORITMOS
Elemento pivote:
17
16 11 8 7 6
Elemento pivote 8
6 7
Sublista3 con los elemento menores a 8
Sublista4 con los elementos mayores o iguales 8
Elemento pivote 8
Sublista1 ordenada
16 11 8
8 11 16
6 7 8 11 16
97 43 40 18 17
Elemento pivote 40
17 18
Sublista5 con los elementos menores a 40
Sublista6 con los elementos mayores o iguales a 40
Elemento pivote 43
Sublista2 ordenada
Lista ordenada
97 43 40
40 43 97
17 18 40 43 97
6 7 8 11 16 17 18 40 43 97
Problemas
2.1 un mtodo de ordenacin muy simple pero no muy eficiente de elementos x1,x2,x3..xn en orden ascendente
es el siguiente:
Paso1. Localizar el elemento ms pequeo de la lista x1 a xn intercambiarlo con x1+
Paso2. Localizar el elemento ms pequeo de la lista x2 a xn intercambiarlo con x2
Paso3. Localizar el elemento ms pequeo de la lista x3 a xn intercambiarlo con xn
En el ltimo paso los dos ltimos elementos se comparan e intercambian si es necesario, y la ordenacin se termina.
Escribir un programa para ordenar una lista de elementos siguiendo este mtodo.
ALGORITMOS
2.2 Dado un vector x de n elementos reales, donde n es impar, disear una funcin que calcule y devuelva la mediana
de ese vector .La mediana es el valor tal que la mitad de los nmeros son mayores que el valor y la otra mitad son
menores. Escribir un programa que compruebe la funcin.
ALGORITMOS
2.3 Se trata de resolver el siguiente problema escolar. Dadas las notas de los alumnos de un colegio en el primer curso
de bachillerato, en las diferentes asignaturas (5 por comodidad), se trata de calcular la media de cada alumno, la
media de cada asignatura, la media total de la clase y ordenar los alumnos en orden decreciente de notas medias
individuales.
ALGORITMOS
10
ALGORITMOS
2.4 Escribir un programa de consulta de telfonos. Leer un conjunto de datos de mil nombres y nmeros de telfono
de un archivo que contiene los nmeros en orden aleatorio las consultas podrn realizarse por nombre o por nmero
telefnico.
11
ALGORITMOS
12
ALGORITMOS
2.5 realizar un programa que compare el tiempo de clculo de bsquedas secuencial y binaria .Una lista A se
rellena con 2.000 enteros aleatorios en el rango 01999 y a continuacin se ordena. Una segunda lista B
con 500 enteros aleatorios en el mismo rango los elementos de b se utilizan como claves de los algoritmos
de bsqueda
13
ALGORITMOS
2.6 Se dispone de dos vectores, maestro y esclavo, del mismo tipo y nmeros de elementos. Se deben
imprimir en dos columnas adyacentes. Se ordena el vector maestro pero siempre que un elemento de
maestro se mueva, el elemento correspondiente de esclavo debe moverse tambin; es decir, cualquier cosa
que se haga en el maestro[i] debe hacerse en el esclavo[i]. Despus de realizar la ordenacin se imprimen
de nuevo los vectores. Escribir un programa que realice esta tarea.
Nota= no utilizar quicksort.
14
ALGORITMOS
15
ALGORITMOS
16
ALGORITMOS
2.7 Cada lnea de un archivo de datos contiene informacin sobre una compaa de informtica.
La lnea contiene el nombre del empleado, las ventas efectuadas por el mismo y el nmero de aos
de antigedad del empleado en la compaa. Escribir un programa que lea la informacin del archivo
de datos y a continuacin se visualiza. La informacin debe ser ordenada por ventas de mayor a
menor y visualizada de nuevo.
17
ALGORITMOS
18
ALGORITMOS
19
ALGORITMOS
20
ALGORITMOS
21
ALGORITMOS
22
ALGORITMOS
2.9 Construir un mtodo que permita ordenar por fechas y de mayor a menor un vector den
elementos que contiene datos de contratos (n 50). Cada elemento del vector debe ser un objeto con
los campos da, mes, ao y nmero de contrato. Pueden existir diversos contratos con la misma
fecha, pero no nmeros de contrato repetidos.
Nota: El mtodo a utilizar para ordenar ser el de radixsort.
23
ALGORITMOS
24
ALGORITMOS
2.10 Escribir un programa que genere un vector de 10.000 nmeros aleatorios de 1 a 500.
Realice la ordenacin del vector por dos mtodos:
- Binsort.
- Radixsort.
Escribir el tiempo empleado en la ordenacin de cada mtodo.
Cdigo fuente de nuestro programa
25
ALGORITMOS
26
ALGORITMOS
27
ALGORITMOS
28
ALGORITMOS
29