Media y mediana en C usando arreglo y qsort

Mediana y media en C

Resumen: obtener la mediana y la media de un arreglo en C. Es decir, obtener el promedio de un arreglo y también el elemento central o el que se encuentra a la mitad de la sucesión.

Para ello vamos a usar arreglos y condicionales sencillas.

La media: promedio

Primero comenzamos con la media, que no es otra cosa que el promedio. Si quieres ver el algoritmo a detalle mira: obtener promedio de arreglo en C.

Lo único que hacemos es recorrer todo el arreglo, ir sumando cada valor y luego dividir la sumatoria entre la longitud.

// Obtener media
int sumatoria = 0;
for (int x = 0; x < longitud; x++) {
    sumatoria += arreglo[x];
}
float media = (float) sumatoria / (float) longitud;

Obtener mediana

Para obtener la mediana primero debemos tener el arreglo ordenado de cualquier manera, es decir, ascendente o descendente.

Puedes ordenar el arreglo usando qsort, método de burbuja o quicksort. Aquí usaré qsort por simplicidad.

Después de tener el arreglo debemos tener su longitud, y saber si es par o impar. En caso de que sea par, debemos obtener los dos elementos del centro y obtener su promedio.

En caso de que sea impar, obtenemos el elemento del centro.

Mediana de arreglo en C

Definimos el arreglo así como otras variables que nos ayudarán a encontrar el elemento medio y la longitud del mismo:

int arreglo[] = {28, 11, 96, 21, 97, 6, 18, 13, 1, 19, 51};
int tamanioElemento = sizeof arreglo[0];
int longitud = sizeof arreglo / tamanioElemento;

Lo ordenamos:

int funcionQueCompara(const void *a, const void *b) {
    // Castear a enteros
    int aInt = *(int *) a;
    int bInt = *(int *) b;
    // Al restarlos, se debe obtener un número mayor, menor o igual a 0
    // Con esto ordenamos de manera ascendente
    return bInt - aInt;
}

qsort(arreglo, longitud, tamanioElemento, funcionQueCompara);

Ahora calculamos la mitad de la longitud del arreglo y dependiendo de si es par o no, obtenemos distintos resultados para la mediana:

int mediana;
// Después vemos si la longitud es par
if (longitud % 2 == 0) {
    // Debemos promediar los valores del centro
    mediana = (arreglo[mitad - 1] + arreglo[mitad]) / 2;
} else {
    mediana = arreglo[mitad];
}

Finalmente la imprimimos junto con el arreglo y el promedio:

printf("Imprimendo arreglo:\n");
for (int x = 0; x < longitud; x++) {
    printf("%d ", arreglo[x]);
}
printf("\nMediana: %d", mediana);
printf("\nMedia: %f", media);

Poniendo todo junto

El código completo queda así:

/**
 * Obtener media y mediana de arreglo en C
 * Media: promedio
 * Mediana: el elemento que se encuentra en el centro de una serie ordenada
 *
 * @author parzibyte
 * @see https://parzibyte.me/blog
 * */
#include <stdio.h>
#include <stdlib.h>


int funcionQueCompara(const void *a, const void *b) {
    // Castear a enteros
    int aInt = *(int *) a;
    int bInt = *(int *) b;
    // Al restarlos, se debe obtener un número mayor, menor o igual a 0
    // Con esto ordenamos de manera ascendente
    return bInt - aInt;
}


int main(void) {
    int arreglo[] = {28, 11, 96, 21, 97, 6, 18, 13, 1, 19, 51};
    int tamanioElemento = sizeof arreglo[0];
    int longitud = sizeof arreglo / tamanioElemento;

    // Obtener media
    int sumatoria = 0;
    for (int x = 0; x < longitud; x++) {
        sumatoria += arreglo[x];
    }
    float media = (float) sumatoria / (float) longitud;
    // Ahora sumatoria
    // Primero ordenamos el arreglo
    qsort(arreglo, longitud, tamanioElemento, funcionQueCompara);

    int mitad = longitud / 2;
    int mediana;
    // Después vemos si la longitud es par
    if (longitud % 2 == 0) {
        // Debemos promediar los valores del centro
        mediana = (arreglo[mitad - 1] + arreglo[mitad]) / 2;
    } else {
        mediana = arreglo[mitad];
    }
    printf("Imprimendo arreglo:\n");
    for (int x = 0; x < longitud; x++) {
        printf("%d ", arreglo[x]);
    }
    printf("\nMediana: %d", mediana);
    printf("\nMedia: %f", media);
    return 0;
}

Al ejecutarlo en mi caso es:

Media y mediana en C usando arreglo y qsort
Imprimir media y mediana en C

¿Más ejercicios sobre ANSI C? míralos aquí.

Estoy aquí para ayudarte 🤝💻


Estoy aquí para ayudarte en todo lo que necesites. Si requieres alguna modificación en lo presentado en este post, deseas asistencia con tu tarea, proyecto o precisas desarrollar un software a medida, no dudes en contactarme. Estoy comprometido a brindarte el apoyo necesario para que logres tus objetivos. Mi correo es parzibyte(arroba)gmail.com, estoy como@parzibyte en Telegram o en mi página de contacto

No te pierdas ninguno de mis posts 🚀🔔

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.

Dejar un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *