Ordenamiento por selección en C

Hoy veremos cómo implementar el algoritmo de ordenamiento por selección en C. Se trata de implementar un algoritmo de selección para ordenar un arreglo.

Este algoritmo es ligeramente superior y más rápido al ordenamiento de burbuja.

Explicación del algoritmo

En lugar de recorrer todo el arreglo e intercambiar solo si el valor actual es mayor que el siguiente, en este caso simplemente buscamos el elemento menor de la lista y lo enviamos al primer lugar, luego seguimos buscando y al menor que encontremos lo cambiamos por el segundo.

De este modo intercambiamos el elemento más pequeño con el elemento i.

Intercambio de variables

Dentro del ciclo que recorre al arreglo y lo ordena, necesitamos intercambiar variables. Existen varias formas, una de ellas es declarar una temporal, asignar a la temporal el valor de A, asignar a A el valor de B y finalmente asignar a B el valor de A.

Yo prefiero hacerlo con valores por referencia, pues el código queda más legible. El funcionamiento es el mismo, pero encerramos todo en una función.

/*
Simple función que intercambia dos variables por referencia.
Más información en:
Funciones por referencia y por valor en C
*/ void intercambiar(int *a, int *b) { int temporal = *a; *a = *b; *b = temporal; }

Implementación de ordenamiento por selección

Hablar es de mal gusto; veamos el código. Simplemente recorremos el arreglo en dos ciclos, pero ahora, en el segundo, ya no recorremos desde 0 hasta n, sino que empezamos desde el valor de i + 1 pues podemos suponer que todos los valores a la izquierda ya están ordenados.

void seleccion(int arreglo[], int longitud) {
  for (int i = 0; i < longitud - 1; i++) {
    for (int j = i + 1; j < longitud; j++) {
     
      if (arreglo[i] > arreglo[j]) {
        // ...intercambiarlos, es decir, mover el actual a la derecha y el de la derecha al actual
        intercambiar(&arreglo[i], &arreglo[j]);
      }
    }
  }
}

Se puede observar que la función recibe un arreglo y la longitud del mismo. Lo recorre y lo ordena usando el método de selección u ordenamiento por selección.

Poniendo todo junto

Para terminar el post veamos cómo usar esta función. Queda así:

/*
  ____          _____               _ _           _       
 |  _ \        |  __ \             (_) |         | |      
 | |_) |_   _  | |__) |_ _ _ __ _____| |__  _   _| |_ ___ 
 |  _ <| | | | |  ___/ _` | '__|_  / | '_ \| | | | __/ _ \
 | |_) | |_| | | |  | (_| | |   / /| | |_) | |_| | ||  __/
 |____/ \__, | |_|   \__,_|_|  /___|_|_.__/ \__, |\__\___|
         __/ |                               __/ |        
        |___/                               |___/         
    
    Blog:       https://parzibyte.me/blog
    Ayuda:      https://parzibyte.me/blog/contrataciones-ayuda/
    Contacto:   https://parzibyte.me/blog/contacto/
    
    Copyright (c) 2020 Luis Cabrera Benito
    Licenciado bajo la licencia MIT
    
    El texto de arriba debe ser incluido en cualquier redistribución
*/

#include <stdio.h>

/*
Simple función que intercambia dos variables por referencia.
Más información en:
Funciones por referencia y por valor en C
*/ void intercambiar(int *a, int *b) { int temporal = *a; *a = *b; *b = temporal; } void seleccion(int arreglo[], int longitud) { for (int i = 0; i < longitud - 1; i++) { for (int j = i + 1; j < longitud; j++) { if (arreglo[i] > arreglo[j]) { // ...intercambiarlos, es decir, mover el actual a la derecha y el de la derecha al actual intercambiar(&arreglo[i], &arreglo[j]); } } } } int main(void) { // El arreglo int arreglo[] = {30, 28, 11, 96, -5, 21, 18, 12, 22, 30, 97, -1, -40, -500}; /* Calcular la longitud, puede ser definida por ti o calculada:
Longitud de un arreglo en C
*/ int longitud = sizeof arreglo / sizeof arreglo[0]; /* Imprimirlo antes de ordenarlo */ printf("Imprimiendo arreglo antes de ordenar...\n"); for (int x = 0; x < longitud; x++) { printf("%d ", arreglo[x]); } printf("\n"); seleccion(arreglo, longitud); /* Imprimirlo después de ordenarlo */ printf("Imprimiendo arreglo despues de ordenar...\n"); for (int x = 0; x < longitud; x++) printf("%d ", arreglo[x]); return 0; }

Al ejecutarlo, la salida es la siguiente:

Ordenamiento por selección en C – Ordenar arreglo

¿Más sobre el lenguaje C? click 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.

1 comentario en “Ordenamiento por selección en C”

Dejar un comentario

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