A continuación, te proporciono la relación entre los algoritmos de ordenación y las estructuras de datos que más afectan o se ven afectadas por la elección de estas estructuras, en términos de tiempo de ejecución, espacio de memoria, y la complejidad de los algoritmos.
1. BubbleSort
- Estructuras de Datos Relacionadas: Listas (arrays o listas enlazadas).
- Impacto:
- Arrays: En un array, la complejidad de tiempo es O(n²) porque el algoritmo necesita acceder y comparar elementos en posiciones consecutivas.
- Listas Enlazadas: La eficiencia puede verse afectada, ya que el algoritmo requiere intercambiar nodos, lo que aumenta la complejidad debido a la necesidad de recorrer la lista repetidamente para acceder a los elementos.
- Conclusión: Si bien se puede implementar en listas, el rendimiento empeora en listas enlazadas debido a la necesidad de mover elementos de forma no contigua.
2. SelectionSort
- Estructuras de Datos Relacionadas: Arrays.
- Impacto:
- Arrays: Aunque es más eficiente en comparación con BubbleSort debido a que realiza menos intercambios, sigue siendo O(n²) en tiempo.
- Listas Enlazadas: Similar a BubbleSort, en listas enlazadas la complejidad también es O(n²), pero debido a la naturaleza de los nodos, las operaciones de intercambio se vuelven más costosas (en lugar de swaps directos, se deben reorganizar los punteros).
- Conclusión: Los arrays son más eficientes para SelectionSort en comparación con las listas enlazadas.
3. InsertionSort
- Estructuras de Datos Relacionadas: Arrays y Listas Enlazadas.
- Impacto:
- Arrays: El acceso a los elementos es directo y eficiente, pero sigue teniendo una complejidad O(n²) en el peor caso.
- Listas Enlazadas: InsertionSort es relativamente eficiente en listas enlazadas debido a que no requiere mover los elementos en memoria, sino que ajusta los punteros.
- Conclusión: InsertionSort se comporta mejor en listas enlazadas que en arrays cuando los datos están parcialmente ordenados.
4. MergeSort
- Estructuras de Datos Relacionadas: Arrays, Listas Enlazadas.
- Impacto:
- Arrays: MergeSort es eficiente con arrays y utiliza espacio adicional O(n) para almacenar las sublistas, lo que puede aumentar el uso de memoria.
- Listas Enlazadas: Se adapta bien a listas enlazadas porque no requiere acceso aleatorio a los elementos; en cambio, puede fusionar listas de forma más natural.
- Conclusión: Funciona de manera eficiente tanto en arrays como en listas enlazadas, pero el uso de memoria es un factor importante a considerar, especialmente en arrays.
5. QuickSort
- Estructuras de Datos Relacionadas: Arrays, Pilas (para la implementación recursiva).
- Impacto:
- Arrays: Al igual que MergeSort, QuickSort funciona muy bien con arrays debido a su acceso eficiente a los elementos, y su complejidad promedio de O(n log n).
- Pilas: Si se implementa de manera recursiva, la profundidad de la recursión puede causar un uso significativo de la pila de llamadas, aunque las implementaciones iterativas pueden mitigar esto.