Sie sind auf Seite 1von 30

ESCUELA POLITCNICA NACIONAL

INGENIERA EN INGENIERA EN SISTEMAS INFORMTICOS Y DE


COMPUTACIN

ASIGNATURA: Algoritmos

Autor:
Escobar Fernanda

TIPO DE INSTRUMENTO: TareaN.1


FECHA: 28/10/2014

TEMA: ALGORITMOS DE ORDENACION Y BUSQUEDA

PERODO ACADMICO: 2014-B

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)

T(n) = 3n+ T(n - 1)


= 3n + (1 + T(n-2)) = 3n + 2 + T(n-2)
= 3n + (1 + T(n-3)) = 3n + 3 + T(n-3)

= 3n + i + T (n-i)

= (n-1) + T(n (n-1)) = (n-1) + 1


T(n) es O(n)

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

1.5 Se tiene la siguiente lista


47 3

21

32 56 92

Despus de dos pasadas de un algoritmo de ordenacin el array se ha quedado dispuesto asi :


3

21

47

32

56 92

Se trata de un algoritmo de insercin ya que:


3

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

1.8 Partiendo del mismo


array en el ejercicio
anterior encuentre las
particiones e
intercambios que realiza
el algoritmo de
ordenacin quicksort

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

Sublista derecha1 (elementos mayores a 16)

2. El algoritmo se aplica a la sublista izquiierda pivote 11


Elementos menore que 11

8 6 7

Elemento pivote 7
Sublista izquierda

8 11

3.El algoritmo se aplica a la sublista derecha pivote 40


18

Elemnetos menores que 40


Elementos mayore o iguales a 40

43 40 97

Elemnento pivote 43

40 43 97

18 40 43 97

Lista ordenada final


6 7 8 11 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];

/* indicce del elemento central */


/* valor del ndice central*/

if (clave == valorCentral)
return central;

/* encontrado y devuelve la posiscion*/

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

Supongamos que tenemos la siguiente lista:

8 43

17

40 16 18

97

11

Al estar ordenada deberamos tener

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

Si esta lista estuviese el orden


inverso entonces tendramos

Entonces al aplicar el mtodo Shell para ordenar tendramos:

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

Paso 1 para el mtodo


quicksort
Elemento pivote 16

Sublista1 con los elementos menores a 16


Sublista2 con los elementos mayores o iguales a 16

16 17 18 40 43 97

Lista ordenada

6 7 8 11 16 17 18 40 43 97

esta lista estuviese el orden inverso entonces tendramos

97 43 40 18 17 16 11 8 7 6

Entonces al aplicar el mtodo Shell para ordenar tendramos:

ALGORITMOS
Elemento pivote:

17

Sublista1 con los elementos menores a 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

Sublista2 con los elementos mayores o iguales a 17

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.

Cdigo fuente del programa

11

ALGORITMOS

Salida de pantalla del programa

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

Salida de pantalla de nuestro programa

19

ALGORITMOS

2.8 Se desea realizar un programa que realice las siguientes tareas:


a) Generar, aleatoriamente, una lista de 999 nmeros reales en el rango de 0 a 20.000.
b) Ordenar en modo creciente por el mtodo de la burbuja.
c) Ordenar en modo creciente por el mtodo Shell.
d) Ordenar en modo creciente por el mtodo Radixsort.
e) Buscar si existe el nmero x (ledo del teclado) en la lista. La bsqueda debe ser binaria.
Ampliar el programa anterior de modo que se puedan obtener y visualizar en el programa principal
los siguientes tiempos:
t1. Tiempo empleado en ordenar la lista por cada uno de los mtodos.
t2. Tiempo que se empleara en ordenar la lista ya ordenada.
t3. Tiempo empleado en ordenar la lista ordenada en orden inverso.

Cdigo fuente de nuestro programa

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

Salida de pantalla de nuestro programa

27

ALGORITMOS

2.11 Se leen dos listas de nmeros enteros, A y B de 100 y 60 elementos, respectivamente.


Se desea resolver mediante procedimientos las siguientes tareas: a) Ordenar aplicando el mtodo de
quicksort cada una de las listas A y B.
b) Crear una lista C por intercalacin o mezcla de las listas A y B.
c) Visualizar la lista C ordenada.

Cdigo fuente del programa

28

ALGORITMOS

29

Das könnte Ihnen auch gefallen