Directorio de artículos
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?
- Establezca el primer elemento al mínimo.
- 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.
- Después de cada iteración, el mínimo se coloca al principio de la lista sin clasificar.
- 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.
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.