|
| 1 | +# Selección rápida o Quick Select |
| 2 | + |
| 3 | +## Definición del problema |
| 4 | + |
| 5 | +Dada una matriz, encontrar el k-ésimo elemento mayor y menor con un una complejidad lineal de Tiempo |
| 6 | + |
| 7 | +## Enfoque |
| 8 | + |
| 9 | +- Selecciona un elemento que sirva de pivote aleatoriamente. |
| 10 | +- Aplica particiones como las utilizadas en el algoritmo de ordenamiento rápido o quick sort. |
| 11 | +- Después de realizar las particiones, el pivote se deberá colocar en su posición ordenada. Todos los elementos menores que el pivote quedarán a su izquierda y los mayores a su derecha. |
| 12 | +- Si el índice del pivote ordenado es k, entonces el pivote está en su k-ésimo elemento y devolveremos el número. |
| 13 | +- De otro modo, verifica si 'k' es mayor o menor y selecciona un nuevo pivote en el rango. |
| 14 | +- Repite los pasos hasta conseguir el k-ésimo elemento en la k-ésima posición. |
| 15 | + |
| 16 | +## Complejidad de Tiempo |
| 17 | + |
| 18 | +- `O(n^2)` En el peor de los casos |
| 19 | + |
| 20 | +- `O(n)` En el mejor de los casos |
| 21 | + |
| 22 | +- `O(n)` Rendimiento promedio |
| 23 | + |
| 24 | +## Nombre de su fundador |
| 25 | + |
| 26 | +- Este algoritmo fue desarrollado por Tony Hoare. También es conocido como el 'Algoritmo de Selección de Hoare'. |
| 27 | + |
| 28 | +## Ejemplo |
| 29 | + |
| 30 | +``` |
| 31 | +Matriz[] = {8,2,11,7,9,1,3} |
| 32 | +Índices: 0 1 2 3 4 5 6 |
| 33 | +
|
| 34 | +Digamos que k = 4 y tenemos que encontrar el cuarto elemento menor: |
| 35 | +
|
| 36 | +1. Escogiendo un pivote de forma aleatoria, obtenemos 7. |
| 37 | +2. Intercambiamos 7 con el último elemento y aplicamos el algoritmo de particionado. |
| 38 | +3. Después de aplicar la partición, todos los elementos menores que 7 se colocan a la izquierda y los mayores, a la derecha. |
| 39 | +4. Como la posición de '7' es la cuarta, simplemente devolveremos el valor 7. |
| 40 | +``` |
| 41 | + |
| 42 | +## Enlaces de implementaciones de código |
| 43 | + |
| 44 | +- [C++](https://github.com/TheAlgorithms/C-Plus-Plus/blob/master/selecting/quickSelect.cpp) |
| 45 | +- [Python](https://programmerclick.com/article/92711720579/) |
| 46 | + |
| 47 | +## Enlaces de explicación en vídeo |
| 48 | + |
| 49 | +[Programación en C++, Ordenamiento por Selección](https://www.youtube.com/watch?v=HVa2_UtXkCI) |
0 commit comments