Está en la página 1de 13

ESCUELA POLITÉCNICA NACIONAL

FACULTAD DE INGENIERÍA DE
SISTEMAS

ALGORITMOS (SIC324-GR1)
Informe No: 1

Integrantes:
Dávila José

Guanoluisa Henry

Moncayo Hugo

Paredes Ricardo

PROFESORA: Dra. María Pérez

FECHA DE ENTREGA: 28 de junio de 2020

Taller de:

Uso de los tipos abstractos de datos, las estructuras básicas de control en el diseño
de algoritmos de búsqueda lineal y binaria.
Práctica No.: 3

Tema 1.3. Algoritmos cuadráticos de ordenamiento de peor caso

Objetivos:

Ordenación por Burbuja (Bubble sort):

Es un sencillo algoritmo de ordenamiento. Funciona revisando cada elemento


de la lista que va a ser ordenada con el siguiente, intercambiándolos de
posición si están en el orden equivocado. Es necesario revisar varias
veces toda la lista hasta que no se necesiten más intercambios, lo cual
significa que la lista está ordenada. Este algoritmo obtiene su nombre de
la forma con la que suben por la lista los elementos durante los
intercambios, como si fueran pequeñas burbujas. También es conocido
como el método del intercambio directo. Dado que solo usa
comparaciones para operar elementos, se lo considera un algoritmo de
comparación, siendo el más sencillo de implementar.

Selección:

El ordenamiento por selección mejora el ordenamiento burbuja haciendo un sólo


intercambio por cada pasada a través de la lista. Para hacer esto, un ordenamiento
por selección busca el valor mayor a medida que hace una pasada y, después de
completar la pasada, lo pone en la ubicación correcta. Al igual que con un
ordenamiento burbuja, después de la primera pasada, el ítem mayor está en la
ubicación correcta. Después de la segunda pasada, el siguiente mayor está en su
ubicación. Este proceso continúa y requiere n−1n−1 pasadas para ordenar los n
ítems, ya que el ítem final debe estar en su lugar después de la (n−1) ésima
pasada.

Ordenación por Inserción:


El ordenamiento por inserción, aunque sigue siendo O(n^2), funciona de una
manera ligeramente diferente. Siempre mantiene una sublista ordenada
en las posiciones inferiores de la lista. Cada ítem nuevo se “inserta” de
vuelta en la sublista previa de manera que la sublista ordenada sea un
ítem más largo.

Marco teórico:

Los métodos directos básicos son:

- Ordenación por burbuja (Bubble Sort). Existen varias versiones de


esta forma de ordenamiento: clásica, extendida y mejorada, pero en
este curso sólo nos centraremos en la clásica.

- Ordenación por inserción.

- Ordenación por selección.

Ejercicios propuestos

Se pide que el alumno, ponga en práctica los conceptos vistos sobre los algoritmos
de ordenamiento cuadrático, vistos en clase y, posteriormente en base a lo
desarrollado en el taller (análisis, diseño), complete las etapas que conforman el
desarrollo de los algoritmos (análisis, diseño e implementación y validación), en para
el efecto, serían la implementación y validación, del algoritmo de la búrbuja, de
selección e inserción.

NOTA: Se valorará hacer los programas con el esquema general:

Desarrollo de la práctica:

a. Proponga una función para encontrar el valor 20 en el siguiente array


ordenado: 3 7 11 13 14 17 18 19 20 23 25 28 31 33.

Código

package busquedabinaria;
class Array{

private static int numeros[] = { 3, 7, 11, 13, 14, 17, 18, 19, 20, 23, 25, 28, 31, 33};

private static int b=20;

public static void busquedabinaria(int[] numeros, int b) {

int min =0;

int max= numeros.length-1;

int centro;

while(min <= max){

centro=(min + max)/2;

if(numeros[centro] == b){

System.out.println("El número: "+b+ " se encuentra en la posición: "+ centro);

break;

}else if(b <numeros[centro]){

max = centro-1;

}else{

min = centro+1;

public static void main(String[] args) {

System.out.println("Arreglo:");

System.out.print("[");

for(int i=0; i<numeros.length; i++){

System.out.print(numeros[i]+" ");

System.out.print("]");

System.out.println();
busquedabinaria(numeros, b);

Resultado

2. Estimación del coste computacional

a. Mida el tiempo empleado por los tres métodos de ordenamiento cuadrático y


haga una tabla comparativa donde se ilustre su coste para 2 tamaños de datos
grandes, uno mediano, y otro pequeño, utilizando las funciónes:

i. System.nanoTime ()

ii. System.currentTimeMillis()

Código Clase Ordenamiento

package ordenamientocuadratico;

public class Ordenamiento {

public void OrdenamientoBurbuja(int[] a){

int aux;

for(int i=0; i<a.length; i++){

for(int j=i+1; j<a.length;j++){

if(a[i]>a[j]){
aux=a[i];

a[i]=a[j];

a[j]=aux;

public void OrdenamientoSeleccion(int[] a){

int aux;

for(int i=0; i<a.length-1; i++){

int min=i;

for(int j=i+1; j<a.length;j++){

if(a[j]<a[min]){

min = j;

aux = a[i];

a[i]=a[min];

a[min]=aux;

public void OrdenamientoInsercion(int[] a){

int aux;

for(int i= 1; i<a.length;i++){

aux=a[i];
for(int j=i-1; j>=0 && a[j]>aux;j--){

a[j+1]=a[j];

a[j]=aux;

Código Aplicación Ordenamiento Bubble Sort

package ordenamientocuadratico;

public class Aplicacion {

public static void main(String[] args) {

int arreglo[] ={10, 60, 5, 8, 28, 36, 71, 32, 46, 6, 19, 23, 39, 88, 101, 208, 186,
69, 12,321,608, 123, 43, 678, 80, 456, 912, 85, 12, 345};

Ordenamiento o = new Ordenamiento();

for(int i=0; i<arreglo.length;i++){

System.out.print(arreglo[i]+ " ");

System.out.println();

System.out.println("Arreglo Ordenado");

double inicio = System.nanoTime();

o.OrdenamientoBurbuja(arreglo);

for(int j=0; j<arreglo.length;j++){

System.out.print(arreglo[j]+ " ");

}
double fin = System.nanoTime();

System.out.println();

double tiempo = fin-inicio;

System.out.println("El tiempo de ejecución en ns del Método es: "+ tiempo );

Código Aplicación Ordenamiento Selección

package ordenamientocuadratico;

public class Aplicacion {

public static void main(String[] args) {

int arreglo[] ={10, 60, 5, 8, 28, 36, 71, 32, 46, 6, 19, 23, 39, 88, 101, 208, 186,
69, 12,321,608, 123, 43, 678, 80, 456, 912, 85, 12, 345};

Ordenamiento o = new Ordenamiento();

for(int i=0; i<arreglo.length;i++){

System.out.print(arreglo[i]+ " ");

System.out.println();

System.out.println("Arreglo Ordenado");

double inicio = System.nanoTime();

o.OrdenamientoSeleccion(arreglo);

for(int j=0; j<arreglo.length;j++){

System.out.print(arreglo[j]+ " ");

double fin = System.nanoTime();


System.out.println();

double tiempo = fin-inicio;

System.out.println("El tiempo de ejecución en ns del Método es: "+ tiempo );

Código Aplicación Ordenamiento Inserción

package ordenamientocuadratico;

public class Aplicacion {

public static void main(String[] args) {

int arreglo[] ={10, 60, 5, 8, 28, 36, 71, 32, 46, 6, 19, 23, 39, 88, 101, 208, 186,
69, 12,321,608, 123, 43, 678, 80, 456, 912, 85, 12, 345};

Ordenamiento o = new Ordenamiento();

for(int i=0; i<arreglo.length;i++){

System.out.print(arreglo[i]+ " ");

System.out.println();

System.out.println("Arreglo Ordenado");

double inicio = System.nanoTime();

o.OrdenamientoInsercion(arreglo);

for(int j=0; j<arreglo.length;j++){

System.out.print(arreglo[j]+ " ");

double fin = System.nanoTime();

System.out.println();
double tiempo = fin-inicio;

System.out.println("El tiempo de ejecución en ns del Método es: "+ tiempo );

Resultado Ordenamiento Bubble Sort Arreglo de 30 elementos

Resultado Ordenamiento Selección Arreglo de 30 elementos

Resultado Ordenamiento Inserción Arreglo de 30 elementos

Resultado Ordenamiento Bubble Sort Arreglo de 20 elementos


Resultado Ordenamiento Selección Arreglo de 20 elementos

Resultado Ordenamiento Inserción Arreglo de 20 elementos

Resultado Ordenamiento Bubble Sort Arreglo de 10 elementos


Resultado Ordenamiento Selección Arreglo de 10 elementos

Resultado Ordenamiento Inserción Arreglo de 10 elementos

Resultado Ordenamiento Bubble Sort Arreglo de 5 elementos

Resultado Ordenamiento Selección Arreglo de 5 elementos


Resultado Ordenamiento Inserción Arreglo de 5 elementos

Análisis de resultados:

TABLA COMPARATIVA DE TIEMPOS DE EJECUCIÓN

Arreglo Bubble Sort(ns) Selección(ns) Inserción(ns)

Arreglo Largo 1 30 641501.0 635400.0 547600.0

Arreglo Largo 2 20 401300.0 387200.0 363000.0

Arreglo Mediano 10 230700.0 201201.0 200501.0

Arreglo Pequeño 5 60201.0 55201.0 53900.0

Conclusiones y recomendaciones:

● Se pudo identificar las diferencias de ejecución de los algoritmos de búsqueda binaria y


búsqueda secuencial o lineal y posibles usos de los algoritmos de búsqueda.
● El algoritmo de búsqueda lineal es el más intuitivo de fácil de implementar, pero la
desventaja sería que no puede ser usado para estructuras de datos que tiene muchos
elementos, porque el coste computacional sería grande si el elemento que se busca este en
el último lugar.
● La desventaja del algoritmo de búsqueda binaria es que necesita de un algoritmo de
ordenamiento antes de implementar este algoritmo, sin embargo puede ser utilizado en
estructuras de datos de gran tamaño y el coste computacional sería menos que el del
algoritmo de búsqueda lineal

Bibliografía

● Martin, R. C. (2003). UML for Java programmers. Prentice Hall PTR.


● Aho, A. V., Hopcroft, J. E., & Ullman, J. D. (1988). Estructuras de datos y algoritmos (Vol. 1).
Addison-Wesley Iberoamericana.

También podría gustarte