0% encontró este documento útil (0 votos)
63 vistas10 páginas

Practica3 Quicksort

Este documento presenta el código y resultados de un programa que implementa diferentes versiones del algoritmo Quicksort. El programa permite al usuario seleccionar entre ordenar una lista con Quicksort normal, Quicksort con pivote siempre al final o Quicksort con pivote aleatorio, e imprime el tiempo de ejecución para entradas grandes y pequeñas. Los resultados muestran que Quicksort con pivote aleatorio es más eficiente y que Quicksort con pivote siempre al final falla para entradas muy grandes debido a una saturación de memoria.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
63 vistas10 páginas

Practica3 Quicksort

Este documento presenta el código y resultados de un programa que implementa diferentes versiones del algoritmo Quicksort. El programa permite al usuario seleccionar entre ordenar una lista con Quicksort normal, Quicksort con pivote siempre al final o Quicksort con pivote aleatorio, e imprime el tiempo de ejecución para entradas grandes y pequeñas. Los resultados muestran que Quicksort con pivote aleatorio es más eficiente y que Quicksort con pivote siempre al final falla para entradas muy grandes debido a una saturación de memoria.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 10

Análisis y Diseño de Algoritmos

PRACTICA 3 – Quicksort

Nombre de la profesora: Albortante Morato


Cecilia
Nombre del alumno: Melo Jimenez Jesus Uriel
Grupo: 3CM2
Introducción

Con ayuda del editor de texto y compilador Visual Code Studio se resolverla las problemáticas
planteada para la práctica 3.

Los headers a utilizar en la práctica son los siguientes:


stdio.h: Significa "encabezado de entrada - salida estándar", es el archivo de encabezado de la
biblioteca estándar de C que contiene definiciones de macro, constantes y declaraciones de funciones
y tipos utilizados para las diversas operaciones de entrada/salida. De este header utilizaremos
funciones como printf(Imprime texto y valores de variables, esto escribiendo su respectiva macara de
formato),scanf(Realiza la lectura de la variable con ayuda del operador de dirección de memoria).
time.h: Relacionado con formato de hora y fecha es un archivo de cabecera de la biblioteca estándar
del lenguaje de programación C que contiene funciones para manipular y formatear la fecha y hora del
sistema. De este header utilizaremos el tiempo del sistema para generar los números aleatorios.
stdlib.h: Es el archivo de cabecera de la biblioteca estándar de propósito general del lenguaje de
programación C. Contiene los prototipos de funciones de C para gestión de memoria dinámica, control
de procesos y otras. De esta función utilizaremos la función de srand para generar números
aleatorios.

Las problemáticas planteadas son las siguientes:


Implementar cualquier versión de Quicksort vistas en clase y calcular el tiempo de ejecución para una
entrada introducida por el usuario.
Implementar la versión de Quicksort en donde siempre se elige el pivote al último elemento y calcular
el tiempo de ejecución para una entrada grande.
Implementar la versión de Quicksort en donde siempre se elige pivote al azar elemento y calcular el
tiempo de ejecución para una entrada grande.
Desarrollo
El programa comienza incluyendo las bibliotecas necesarias: stdio.h, time.h, stdlib.h y funciones.h
(cabecera creada por mí en donde están todas las funciones que utilizare).

- Declaramos las variables a utilizar:


n: Almacena la cantidad de valores a ordenar.
op: Almacena la opción seleccionada por el usuario.
i: Variable para usar en bucles.
tiempo_ejecucion: Almacena el tiempo de ejecución de cada algoritmo.
start y end: Variables para medir el tiempo de ejecución usando clock().

- Pide al usuario que ingrese la cantidad de valores a ordenar (n) y verifica que sea un número
positivo.
- Crea un arreglo dinámico en donde se guardarán los datos a ordenar.
- El programa utiliza un bucle do-while para mantener el menú de opciones hasta que el usuario elija
la opción de salir (opción 4), este do-while tiene dentro un switch para el menú de opciones.
- Antes de ejecutar cada algoritmo, se llena el arreglo generado con los datos correspondientes (datos
ordenados o datos aleatorios desordenados)
Opciones:
1. Ordenar el arreglo generado con cualquier implementación de Quicksort.
2. Ordenar el arreglo generado con el algoritmo Quicksort en donde el pivote es el último elemento.
3. Ordenar el arreglo generado con el algoritmo Quicksort en donde el pivote es un elemento
aleatorio.
4. Salir del programa.
- Cada caso calcula el tiempo de ejecución del algoritmo utilizando clock() antes y después de la
ejecución.
- Se muestra el tiempo de ejecución en segundos para el algoritmo seleccionado.
- Si el usuario selecciona la opción 4, el programa sale del bucle y muestra un mensaje de despedida.
- Las funciones fflush(stdin) se utilizan para limpiar el búfer del teclado después de cada entrada para
evitar problemas de entrada incorrecta.

Funciones.h: Este archivo contiene declaraciones de funciones, prototipos de funciones y definiciones


de funciones que se utilizan en el programa principal.
A continuación, se describe las funciones que contiene este archivo:

void quicksort(int arr[], int inicio, int final): Esta función implementa el algoritmo de ordenamiento
quicksort de manera recursiva en un arreglo arr desde el índice inicio hasta el índice final.

int particion(int arr[], int inicio, int final): Esta función se utiliza en el algoritmo quicksort para realizar la
partición del arreglo. Elige un elemento del arreglo (en este caso, el último elemento) como pivote y
reorganiza los elementos del arreglo de manera que todos los elementos menores o iguales al pivote
estén a su izquierda y todos los elementos mayores estén a su derecha. Devuelve la posición final del
pivote después de la partición.

void quicksortRandom(int arr[], int inicio, int final): Esta es una variante de la función quicksort, que
también utiliza el algoritmo quicksort pero con una elección de pivote aleatorio. Esto ayuda a evitar
casos en los que el quicksort tenga un mal rendimiento en arreglos previamente ordenados o
inversamente ordenados. Llama a la función particionRandom para realizar la partición.

int particionRandom(int arr[], int inicio, int final): Esta función elige un elemento aleatorio del arreglo
como pivote y luego llama a la función particion para realizar la partición del arreglo. La elección
aleatoria del pivote mejora el rendimiento en casos específicos.

void intercambiar(int *a, int *b): Esta función se utiliza para intercambiar dos elementos en un arreglo.
Se usa para reorganizar los elementos durante la partición y otras operaciones de ordenamiento.
Archivo “Funciones.h”
Código principal
Resultados

Menú de opciones

Menú de opciones con n menor o igual a cero

opción 1 y 3 con una entrada grande


Opción 2 con una entrada pequeña

Tiempo de ejecución
Cantidad de datos Quicksort pivote al final y Quicksort pivote al final y Quicksort pivote aleatorio
números aleatorios números ordenados y números ordenados
10,000 0.002000 segundos 0.147000 segundos 0.000000 segundos
400,000 2.389000 segundos Se cierra el programa 0.029000 segundos
800,000 9.525000 segundos Se cierra el programa 0.067000 segundos

Conclusión
Al utilizar la opción 1 y 3 con una entrada grande de datos los algoritmos se ejecutan correctamente, el
problema viene cuando se ejecuta la opción 2 con una entrada grande, el programa se cierra después
de un rato de ejecución, esto no pasa con una entrada relativamente pequeña, este resultado me lleva
a pensar que el algoritmo ejecuta demasiadas instrucciones recursivas con una entrada demasiada
grande, lo que genera una saturación en la memoria y provoca que se cierre el programa.

También podría gustarte