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

Resetear GOOJPRT PT-210 MTP-II (Impresora térmica)

El día de hoy vamos a ver cómo restablecer la impresora térmica GOOJPRT PT-210 a…

1 semana hace

Proxy Android para impresora térmica ESC POS

Hoy voy a enseñarte cómo imprimir en una impresora térmica conectada por USB a una…

1 semana hace

Android – Servidor web con servicio en segundo plano

En este post voy a enseñarte a programar un servidor web en Android asegurándonos de…

1 semana hace

Cancelar trabajo de impresión con C++

En este post te quiero compartir un código de C++ para listar y cancelar trabajos…

1 mes hace

Copiar bytes de Golang a JavaScript con WebAssembly

Gracias a WebAssembly podemos ejecutar código de otros lenguajes de programación desde el navegador web…

2 meses hace

Imprimir PDF con Ghostscript en Windows de manera programada

Revisando y buscando maneras de imprimir un PDF desde la línea de comandos me encontré…

2 meses hace