Método de Ordenación Rápida Quicksort
Método de Ordenación Rápida Quicksort
Método de Ordenación Rápida Quicksort
Facultad de Ingeniería
Alumno:
Lugo Martínez Germán
Profesor: Ing. Lugo Martínez Germán
Grupo: 37
Semestre: 2025-1 14 de noviembre de 2024
Universidad Nacional
Autónoma de México Fundamentos de programación
Índice
1. Introducción 2
3. Análisis 2
4. Diseño 4
4.1. Pesudocódigo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
4.2. Diagrama de flujo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
5. Implementación 6
6. Pruebas 7
7. Conclusiones 8
1
Universidad Nacional
Autónoma de México Fundamentos de programación
1. Introducción
En C, los métodos de ordenamiento son algoritmos que se utilizan para reorganizar los elementos de
una lista o arreglo en un orden específico, generalmente ascendente o descendente. Estos algoritmos son
fundamentales en programación, y cada uno tiene sus ventajas y desventajas en términos de eficiencia y
complejidad.
El elemento de separación.
3. Análisis
Para una entrada:
[ 18 11 27 13 9 4 16 ]
2
Universidad Nacional
Autónoma de México Fundamentos de programación
Se elije el pivote: 13. Se recorre la lista desde el extremo izquierdo y se busca un elemento mayor que
13 (se encuentra el 18). A continuación, se busca desde el extremo derecho un valor menor que 13 (se
encuentra el 4).
[ 18 11 27 13 9 4 16 ]
[4 11 27 13 9 18 16 ]
Se isigue recorriendo el vector por la izquierda y se localiza el 27, y a continuación otro valor bajo se
encuentra a la derecha (el 9). Intercambiar estos dos calores y se obtiene:
[4 11 9 13 27 18 16 ]
Al intentar este proceso una vez más, se encuentra que las exploraciones de los dos extremos vienen juntos
sin encontrar ningún futuro valor que esté "fuera de lugar". En este punto se conoce que todos los valores a
la derecha son mayores que todos los valores a la izquierda del pivote. Se ha realizado una partición en la
lista original, que ha quedado dividida en dos listas más pequeñas:
[4 11 9 [13] 27 18 16 ]
Ninguna de amabas listas está ordenada; sin embargo, basados en los resultados de esta primera parti-
ción, se pueden ordenar ahora las dos particiones independiente. Esto es, si ordenamos la lista:
[4 11 9]
y su posición, y la lista:
[ 27 18 16 ]
[4 9 11 13 16 18 27 ]
3
Universidad Nacional
Autónoma de México Fundamentos de programación
4. Diseño
4.1. Pesudocódigo
A continuación se muestra el pseudocódigo para el algoritmo:
1 INICIO
2 Llenar ( A )
3 Algoritmo quicksort (A , inf , sup )
4 i <- inf
5 j <- sup
6 x <- A [( inf + sup ) div 2]
7 mientras i <= j hacer
8 mientras A [ i ] < x hacer
9 i <- i + 1
10 fin_mientras
11 mientras A [ j ] > x hacer
12 j <- j - 1
13 fin_mientras
14 si i <= j entonces
15 tam <- A [ i ]
16 A [ i ] <- A [ j ]
17 A [ j ] <- tam
18 i <- i + 1
19 j <- j - 1
20 fin_si
21 fin_mientras
22 si inf < j
23 llamar_a quicksort (A , inf , j )
24 fin_si
25 si i < sup
26 llamar_a quicksort (A , i , sup )
27 fin_si
28 FIN
4
Universidad Nacional
Autónoma de México Fundamentos de programación
5
Universidad Nacional
Autónoma de México Fundamentos de programación
5. Implementación
El código en lenguaje C que realiza el Método de ordenación rápida "quicksort":
1 # include < stdio .h >
2
6
Universidad Nacional
Autónoma de México Fundamentos de programación
44 int main () {
45 int data [] = {8 , 7 , 2 , 1 , 0 , 9 , 6};
46 int n = sizeof ( data ) / sizeof ( data [0]);
47
56 return 0;
57 }
6. Pruebas
Para la siguiente entrada:
[8 7 2 1 0 9 6]
7
Universidad Nacional
Autónoma de México Fundamentos de programación
7. Conclusiones
El Quicksort es uno de los algoritmos de ordenación más eficientes y ampliamente utilizados debido
a su rendimiento promedio y su implementación relativamente sencilla. A continuación, se presentan las
principales conclusiones sobre este método:
Ventajas:
Eficiencia promedio: En el caso promedio, Quicksort tiene una complejidad temporal de O(n log n),
lo que lo convierte en un algoritmo muy rápido para grandes conjuntos de datos.
In-place: No requiere memoria adicional para realizar el ordenamiento, lo que lo hace eficiente en
términos de uso de espacio.
Desventajas:
Peor caso: En el peor caso, Quicksort tiene una complejidad temporal de O(n²), lo que ocurre cuando
la partición siempre genera subarreglos desbalanceados (por ejemplo, cuando el pivote es siempre el
elemento más grande o más pequeño).
Recursividad: La recursividad puede consumir recursos adicionales en sistemas con poca memoria.
Consideraciones adicionales:
Elección del pivote: La elección del pivote es crucial para el rendimiento de Quicksort. Una buena
elección del pivote puede reducir significativamente el número de comparaciones y mejorar el tiempo
de ejecución.
Optimizaciones: Existen diversas técnicas para optimizar Quicksort, como la optimización de la cola
corta, el uso de introspective sort y la elección de pivotes aleatorios.
Aplicaciones: Quicksort se utiliza en una amplia variedad de aplicaciones, desde sistemas operativos
hasta bases de datos y bibliotecas de programación.