Ordenamiento por selección

Harshit Jindal 12 octubre 2023
  1. Algoritmo de ordenamiento por selección
  2. Ejemplo de ordenamiento por selección
  3. Implementación del algoritmo de ordenamiento por selección
  4. Complejidad del algoritmo de Ordenamiento por selección
Ordenamiento por selección

La ordenamiento por selección es un algoritmo de ordenación simple. Funciona dividiendo el array en dos partes: un subarray ordenado y otro sin ordenar. La ordenamiento por selección encuentra el elemento más pequeño dentro del subarray sin ordenar y lo mueve al último índice del subarray ordenado. Se utiliza cuando las operaciones de intercambio son muy costosas porque, como máximo, sólo se requieren n intercambios.

Algoritmo de ordenamiento por selección

Supongamos que tenemos un array A[] sin ordenar que contiene n elementos.

  • Seleccionamos el índice del primer elemento del subarray sin ordenar como índice mínimo del elemento min.
  • Compara el valor en min con el resto de los elementos y lo restablece a este elemento si se encuentra un elemento más pequeño.
  • Intercambiar el elemento en min con el elemento en el último índice del subarray ordenado.
  • Repetir el paso anterior n-2 veces para el resto de los elementos de la submatriz sin ordenar.

Ejemplo de ordenamiento por selección

Supongamos que tenemos el array (5,3,4,2,1,6). Vamos a ordenarlo utilizando el algoritmo de ordenamiento por selección.

  • Primera Iteración

Elemento mínimo: A[4] = 1

Intercambio (A[4], A[0]). El array se convierte en: (1) (3,4,2,5,6).

  • Segunda Iteración

Elemento mínimo: A[3] = 2

Intercambio (A[3], A[1]). El array se convierte en: (1,2) (4,3,5,6)

  • Tercera Iteración

Elemento mínimo: A[3] = 3

Intercambio (A[3], A[2]). El array se convierte en: (1,2,3) (4,5,6).

  • Cuarta Iteración

Elemento mínimo: A[3] = 4

Intercambio (A[3], A[3]). El array se convierte en: (1,2,3,4) (5,6).

  • Quinta Iteración

Elemento mínimo: A[4] = 5

Intercambio (A[4], A[4]). El array se convierte en: (1,2,3,4,5) (6)

El último elemento ya está ordenado. Obtenemos el array ordenado como : (1,2,3,4,5,6)

Implementación del algoritmo de ordenamiento por selección

#include <bits/stdc++.h>
using namespace std;

void selectionSort(int arr[], int n) {
  for (int i = 0; i < n - 1; i++) {
    // Find the minimum element for index i
    int min = i;
    for (int j = i + 1; j < n; j++)
      if (arr[j] < arr[min]) min = j;
    // Put element in sorted position
    swap(arr[min], arr[i]);
  }
}
int main() {
  int n = 6;
  int arr[6] = {5, 3, 4, 2, 1, 6};
  cout << "Input array: ";
  for (int i = 0; i < n; i++) {
    cout << arr[i] << " ";
  }
  cout << "\n";
  selectionSort(arr, n);  // Sort elements in ascending order
  cout << "Output array: ";
  for (int i = 0; i < n; i++) {
    cout << arr[i] << " ";
  }
  cout << "\n";
}

Complejidad del algoritmo de Ordenamiento por selección

Complejidad de tiempo

  • Caso medio

En promedio, se realizan n-i comparaciones en la quinta pasada de la ordenación por inserción. Por tanto, si hay n iteraciones, la complejidad temporal media puede ser la siguiente:

(n-1) + (n-2) + (n-3) + ... + 1 = n*(n-1)/2

Por lo tanto, la complejidad de tiempo es del orden de [Big Theta]: O(n2). También se puede calcular contando el número de bucles. Hay un total de dos bucles de n iteraciones haciendo la complejidad : n*n = n2

  • El peor caso

La complejidad temporal en el peor caso es [Big O] O(n2).

  • El mejor caso

La complejidad temporal en el mejor de los casos es [Big Omega]: O(n2). Es lo mismo que la complejidad temporal en el peor de los casos.

Complejidad espacial

La complejidad espacial del algoritmo de ordenamiento por selección es O(1) porque no se necesita más memoria que una variable temporal.

Harshit Jindal avatar Harshit Jindal avatar

Harshit Jindal has done his Bachelors in Computer Science Engineering(2021) from DTU. He has always been a problem solver and now turned that into his profession. Currently working at M365 Cloud Security team(Torus) on Cloud Security Services and Datacenter Buildout Automation.

LinkedIn

Artículo relacionado - Sort Algorithm