Comprender el algoritmo de ordenación por selección

    En este tutorial, aprenderá cómo funciona la clasificación por selección. Además, encontrará ejemplos del uso de C para ordenar por selección.
    La clasificación selectiva es un algoritmo que selecciona el elemento más pequeño de la lista sin clasificar en cada iteración y coloca el elemento al principio de la lista sin clasificar.

¿Cómo funciona la clasificación por selección?
  1. Establezca el primer elemento al mínimo.
    Inserte la descripción de la imagen aquí
  2. Compare el mínimo con el segundo elemento. Si el segundo elemento es menor que el mínimo, el segundo elemento se designa como mínimo.
    Compare el mínimo y el tercer elemento. Del mismo modo, si el tercer elemento es más pequeño, especifique el tercer elemento como mínimo; de lo contrario, no haga nada. Este proceso continúa hasta el último elemento.
    Inserte la descripción de la imagen aquí
  3. Después de cada iteración, el mínimo se coloca al principio de la lista sin clasificar.
    Inserte la descripción de la imagen aquí
  4. Para cada iteración, el índice comienza desde el primer elemento sin clasificar. Repita los pasos 1 a 3 hasta que todos los elementos estén colocados en las posiciones correctas.
    Inserte la descripción de la imagen aquí
    Inserte la descripción de la imagen aquí
    Inserte la descripción de la imagen aquí
    Inserte la descripción de la imagen aquí
Pseudocódigo para seleccionar el algoritmo de clasificación
selectionSort(array, size)
  repeat (size - 1) times
  set the first unsorted element as the minimum
  for each of the unsorted elements
    if element < currentMinimum
      set element as new minimum
  swap minimum with first unsorted position
end selectionSort
C ejemplo
// Selection sort in C

#include <stdio.h>

// function to swap the the position of two elements
void swap(int *a, int *b) {
    
    
  int temp = *a;
  *a = *b;
  *b = temp;
}

void selectionSort(int array[], int size) {
    
    
  for (int step = 0; step < size - 1; step++) {
    
    
    int min_idx = step;
    for (int i = step + 1; i < size; i++) {
    
    

      // To sort in descending order, change > to < in this line.
      // Select the minimum element in each loop.
      if (array[i] < array[min_idx])
        min_idx = i;
    }

    // put min at the correct position
    swap(&array[min_idx], &array[step]);
  }
}

// function to print an array
void printArray(int array[], int size) {
    
    
  for (int i = 0; i < size; ++i) {
    
    
    printf("%d  ", array[i]);
  }
  printf("\n");
}

// driver code
int main() {
    
    
  int data[] = {
    
    20, 12, 10, 15, 2};
  int size = sizeof(data) / sizeof(data[0]);
  selectionSort(data, size);
  printf("Sorted array in Acsending Order:\n");
  printArray(data, size);
}
la complejidad
Ciclos Numero de comparaciones
la primera vez (n-1)
la segunda vez (n-2)
la tercera vez (n-3)
... ...
la última vez 1

    Número de comparaciones: (n-1) + (n-2) + (n-3) +… + 1 = n (n-1) / 2 aproximadamente igual an 2 n ^ 2norte2 .
    Complejidad = O (n 2 n ^ 2norte2 )
    Además, podemos analizar la complejidad simplemente observando el número de ciclos. Hay 2 bucles, por lo que la complejidad es n * n =n 2 n ^ 2norte2 .
    complejidad del tiempo:

  • Peor complejidad del caso: O ( n 2 n ^ 2norte2 )
    Si queremos ordenar en orden ascendente y la matriz está ordenada en orden descendente, ocurrirá el peor de los casos.
  • Mejor complejidad de caso: O ( n 2 n ^ 2norte2 )
    Aparece cuando la matriz está ordenada.
  • Complejidad de caso promedio: O ( n 2 n ^ 2norte2 )
    Esto sucede cuando los elementos de la matriz están desordenados (ni ascendentes ni descendentes).
Documentos de referencia

[1] Parewa Labs Pvt. Ltd.Selection Sort Algorithm [EB / OL] .https: //www.programiz.com/dsa/selection-sort,2020-01-01.

Supongo que te gusta

Origin blog.csdn.net/zsx0728/article/details/114762207
Recomendado
Clasificación