You are on page 1of 6

INSTITUTO POLITECNICO NACIONAL

UPIICSA

INGENIERIA EN INFORMATICA

Algoritmos computacionales

Maldonado Gutiérrez Edgar Uriel.

3NM40

RETO 3
Algoritmo Eficiente (Problema #3)
Descargar de internet el algoritmo quick sort o usar el proporcionado en clase e integrar:
• Contador: Para ver el número de comparaciones y asignaciones realizadas.
• Relojes: Para medir el tiempo de ejecución, SOLAMENTE DEL ALGORITMO, NO DE
TODO EL PROGRAMA.
Previamente ya deben de contar con un fichero que cuente con 10000 números aleatorios,
ejemplo de código en JAVA aquí:
https://github.com/xergioalex/analysisOfSortAlgorithms/blob/master/algorithms/java/RandomNumb
ers.java
Llenar la siguiente tabla con los resultados de sus pruebas, con respecto al algoritmo de
ordenamiento que hayan elegido.
Cantidad de Numero de comparaciones Tiempo que demoro el
datos y asignaciones algoritmo
10 13 2.192 s
100 189 2.192 s
1000 3051 2.192 s
2000 7047 2.192 s
5000 20,665 2.192 s
7000 30,486 2.192 s
10000 45,992 2.192 s

• Anotar sus observaciones


o ¿Cuánto tarda su computadora en cada movimiento?
Se tardo menos de 2 segundos el tiempo de demora es minimo aun que varia segon
el vios de la maquina .
o ¿El tiempo es proporcional al número de movimientos?
No , lo ordena sin que afecte
o ¿Hay alguna diferencia con respecto a los algoritmos ineficientes que has
manejado?
Si ya que este algoritmo es mas veloz y eficaz
import java.util.InputMismatchException;
import java.util.Random;
import java.util.Scanner;

public class AlgQuick {


public static int max;
public int arrs[];
public int temporal;
public static Scanner sc = new Scanner(System.in);
public static long intercambios = 0;
public static long comparaciones = 0;

public AlgQuick() { // constructor


this.arrs = new int[max];
}

public void quickSort(int[] arreglo, int bajo, int alto) {


if (bajo < alto) {
int indicePivote = particion(arreglo, bajo, alto);
quickSort(arreglo, bajo, indicePivote - 1);
quickSort(arreglo, indicePivote + 1, alto);
}
}

public int particion(int[] arreglo, int bajo, int alto) {


int pivote = arreglo[alto];
int i = bajo - 1;
for (int j = bajo; j < alto; j++) {
comparaciones++;
if (arreglo[j] <= pivote) {
i++;
intercambios++;
intercambiar(arreglo, i, j);
}
}
intercambios++;
intercambiar(arreglo, i + 1, alto);
return i + 1;
}

public void intercambiar(int[] arreglo, int i, int j) {


temporal = arreglo[i];
arreglo[i] = arreglo[j];
arreglo[j] = temporal;
}

public static int aleatorioNum() { // numeros aleatorios


return new Random().nextInt(10000 + 1);
}
public void showArray(int[] array) {
for (int i = 0; i < AlgQuick.max; i++) {
System.out.println(array[i]);
}
}

public static int capEnteros(String mensaje) { // captura y validacion de enteros


boolean continuar;
int n = 0;
do {
continuar = false;
try {
System.out.print(mensaje);
n = sc.nextInt();
} catch (InputMismatchException e) {
System.out.println("\n\tHay un error: " + e);
System.out.println("\n\tIngresar un numero entero");
sc.next();
continuar = true;
}
} while (continuar);
return n;
}
}
---------------------------------------------------------------------------------------------------------------------------------------

import java.text.DecimalFormat;

public class AlgoritmoEficiencia {


public static void main(String[] args) throws Exception {
DecimalFormat df = new DecimalFormat("#0.0000000");
AlgQuick.max =AlgQuick.capEnteros("\n\tDe que tamanio sera tu arreglo? ");
System.out.println("");
AlgQuick arr = new AlgQuick();
for(int i = 0; i <AlgQuick.max; i++) {
arr.arrs[i] = AlgQuick.aleatorioNum();
}

System.out.println("El arreglo original");


arr.showArray(arr.arrs);
long startTime = System.nanoTime();
arr.quickSort(arr.arrs, 0, (AlgQuick.max) - 1);
long endTime = System.nanoTime();
long time = (endTime - startTime);
double tiempo = (double)time/1000000;

System.out.println("El arreglo oredenado");


arr.showArray(arr.arrs);
System.out.println("el teimpo de ejecucion del metodo " + df.format(tiempo) + " ms");
System.out.println("Número de comparaciones: " + AlgQuick.comparaciones);
System.out.println("Número de intercambios: " + AlgQuick.intercambios);
}
}

You might also like