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:

*/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:

*/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:
  
  */  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.
parzibyte

Programador freelancer listo para trabajar contigo. Aplicaciones web, móviles y de escritorio. PHP, Java, Go, Python, JavaScript, Kotlin y más :) https://parzibyte.me/blog/software-creado-por-parzibyte/

Ver comentarios

Entradas recientes

Creador de credenciales web – Aplicación gratuita

Hoy te voy a presentar un creador de credenciales que acabo de programar y que…

1 semana hace

Desplegar PWA creada con Vue 3, Vite y SQLite3 en Apache

Ya te enseñé cómo convertir una aplicación web de Vue 3 en una PWA. Al…

2 semanas hace

Arquitectura para wasm con Go, Vue 3, Pinia y Vite

En este artículo voy a documentar la arquitectura que yo utilizo al trabajar con WebAssembly…

2 semanas hace

Vue 3 y Vite: crear PWA (Progressive Web App)

En un artículo anterior te enseñé a crear un PWA. Al final, cualquier aplicación que…

2 semanas hace

Errores de Comlink y algunas soluciones

Al usar Comlink para trabajar con los workers usando JavaScript me han aparecido algunos errores…

2 semanas hace

Esperar promesa para inicializar Store de Pinia con Vue 3

En este artículo te voy a enseñar cómo usar un "top level await" esperando a…

2 semanas hace

Esta web usa cookies.