Data Structures

Práctica #4: Algoritmos de ordenamiento

Objetivo

Durante esta actividad, los alumnos serán capaces de:


Descripción

Esta actividad se debe realizar en los equipos ya conformados.

Traduce a lenguaje C++ los siguientes algoritmos de ordenamiento a partir del pseudocódigo presentado en el capítulo 6 del libro de [STEPHENS]:

  1. Insertionsort (p. 132)

  2. Selectionsort (p. 134)

  3. Bubblesort (p. 135)

  4. Quicksort (pp. 150-151)

  5. Mergesort (pp. 153-154)

  6. Countingsort (p. 156)

Escribe un reporte con los resultados de correr cada algoritmo como se explica a continuación.

Consideraciones generales

Código de apoyo

Inicializar los valores de un vector

El siguiente código inicializa todos los elementos del vector values con enteros aleatorios entre 0 y max_value - 1, inclusive.

#include <cstdlib>

void fill_random(std::vector<int>& values, int max_value)
{
    std::srand(0);
    for (int i = 0; i < values.size(); ++i) {
        values.at(i) = std::rand() % max_value;
    }
}

El siguiente código inicializa todos los elementos del vector values con enteros que van de forma progresivamente ascendente desde 0 y hasta algún valor menor a max_value.

void fill_incremental(std::vector<int>& values, int max_value)
{
    double section = max_value / static_cast<double>(values.size());
    double current = 0.0;
    for (int i = 0; i < values.size(); ++i) {
        values.at(i) = static_cast<int>(current);
        current += section;
    }
}

El siguiente código inicializa todos los elementos del vector values con enteros que van de forma progresivamente descendente desde algún valor menor a max_value y hasta llegar a 0.

void fill_decremental(std::vector<int>& values, int max_value)
{
    double section = max_value / static_cast<double>(values.size());
    double current = 0.0;
    for (int i = values.size() - 1; i >= 0; --i) {
        values.at(i) = static_cast<int>(current);
        current += section;
    }
}

Cronometrar tiempos de ejecución

El siguiente fragmento permite cronometrar el tiempo de ejecución de una porción de nuestro programa. Lo que se quiera medir se debe sustituir en lugar del comentario correspondiente. Al final la variable total_time contiene un número real con la cantidad de segundos que tardó en correr dicho código.

#include <chrono>

    .
    .
    .

    auto start = std::chrono::high_resolution_clock::now();
    // Place here the code to time
    auto stop = std::chrono::high_resolution_clock::now();
    auto duration =
        std::chrono::duration_cast<std::chrono::microseconds>(
            stop - start);
    double total_time = duration.count() / 1000000.0;

¿Qué se debe entregar?

Usando el procesador de palabras de tu preferencia, escribe un reporte que contenga lo siguiente:

Descarga el reporte como documento PDF con el siguiente nombre: reporte_ordenamientos.pdf.


Upload Instructions

To deliver the reporte_ordenamientos.pdf file, please provide the following information:

Request PIN

Solo es necesario que lo entregue un miembro del equipo.

La fecha límite es el viernes 15 de octubre.