Botón para abrir el Menú Botón para cerrar el Menú
Logo da empresa Alura
Iniciar Sesión Nuestros Planes
Formaciones Conoce a Luri
  • Programación _
  • Front End _
  • Data Science _
  • DevOps _
  • Innovación y Gestión _
Artículos de Tecnología > Programación

Merge y Quick Sort: conozca cuál es el mejor algoritmo

Brendo Rodrigo Souza de Matos
Brendo Rodrigo Souza de Matos
23/06/2022

Compartir

Mira este artículo:
  1. Pero, ¿cuál sería el peor de los casos?
  2. Otras limitaciones
  3. Conclusión

merge-quick-sort-qual-o-melhor-algoritmo

Después de comprender mejor la complejidad de los algoritmos, debemos analizar y comprender las diferencias para considerar la mejor opción entre dos algoritmos igualmente complejos. Este es el caso de Merge Sort y Quick Sort.

En los artículos que se refieren a la implementación de los dos algoritmos en cuestión, notamos que ambos tienen su complejidad en O(N lg N). Pero, ¿cuestionamos la eficiencia de QuickSort en todos los escenarios? ¿Siempre funciona en O(N lg N)? Hagamos un análisis.

Recordando cómo funciona QuickSort, debemos elegir un elemento pivote para asegurar su ubicación correcta en la lista y luego revisar todos los elementos más pequeños a la izquierda y los elementos más grandes a la derecha (según el orden deseado).

Ejecutando esto recursivamente tendremos una lista correctamente ordenada.

Pero, ¿cuál sería el peor de los casos?

Construyamos sobre nuestra implementación de QuickSort, en el que siempre elegimos el elemento en el extremo inferior como pivote.

Imagine que recibimos una lista ya ordenada como entrada al algoritmo. Tenga en cuenta el siguiente comportamiento:

imagem1

Notamos que en cada elección de pivote recorremos el resto de la lista en busca de su posición real. Eso nos recuerda algo, con cada iteración de elección, repasamos la lista, que nos parece un comportamiento cuadrático. Por lo tanto, en el peor de los casos, QuickSort se comporta como O(N²).

Entonces, ¿consideramos que QuickSort siempre es peor que MergeSort? ¡No necesariamente! Vimos que el peor de los casos se debía a la elección del pivote. En este mismo escenario, si elegimos el pivote como elemento central de la lista, en cada iteración ingresamos el mejor caso del algoritmo, que se ejecuta en O(N lg N) así como en el caso promedio. Y ahora nos damos cuenta de que es muy poco probable que caigamos en el peor de los casos de QuickSort.

Por lo tanto, debemos evaluar y considerar los más diversos factores y requisitos para elegir el algoritmo que mejor nos sirva.

Otras limitaciones

Ahora supongamos que estamos en un proyecto con escasos recursos de memoria volátil, lo que hace que cuidar el uso de la memoria sea un requisito no funcional (requisitos relacionados con el rendimiento, la disponibilidad, el mantenimiento y los recursos del proyecto). ¿Qué algoritmo elegir?

Hemos visto que MergeSort crea una lista temporal del mismo tamaño que la original, duplicando así la asignación de memoria. Quizás esta no era la mejor solución para este escenario, ¿no crees?

Conclusión

Hemos visto que cuando se trata de algoritmos con la misma complejidad en la mayoría de los escenarios, debemos evaluar otros factores para elegir la solución que mejor se adapte al contexto en el que nos insertaremos.

Y así finalizamos esta serie de artículos mostrando la importancia de estudiar algoritmos y cómo pueden afectar a nuestros proyectos. Espero que podamos vernos pronto, ¡hasta luego!

Brendo Rodrigo Souza de Matos

Ingeniero de Software apasionado por lo que hace, amante de los nuevos retos y sediento de conocimiento. Actualmente soy Ingeniero de Software de Plataformas en Méliuz (B3: CASH3) y estoy realizando una Maestría en Ciencias de la Computación en la Universidad Federal de Amazonas.

Este articulo fue adecuado para Alura Latam por: Wilfredo Rojas

Brendo Rodrigo Souza de Matos
Brendo Rodrigo Souza de Matos

Engenheiro de Software apaixonado pelo que faz, amante de novos desafios e sedento por conhecimento. Atualmente sou Engenheiro de Software e mestrando em Ciências da Computação pela Universidade Federal do Amazonas.

Artículo Anterior
Búsqueda binaria: aprende a implementar en Python
Siguiente Artículo
¿Para qué sirve String[] args en Java?

Ver otros artículos sobre Programación

Navegación

  • Planes
  • Instructores
  • Blog
  • Política de privacidad
  • Términos de uso
  • Sobre nosotros
  • Preguntas frecuentes

¡CONTÁCTANOS!

  • ¡Quiero entrar en contacto!

Blog

  • Programación
  • Data Science
  • Front End
  • Innovación y Gestión
  • DevOps

AOVS Sistemas de Informática S.A CNPJ 05.555.382/0001-33

SÍGUENOS EN NUESTRAS REDES SOCIALES

YouTube Facebook Instagram Linkedin Whatsapp Spotify

NOVEDADES Y LANZAMIENTOS

Aliados

  • Programa de aceleração Scale-Up Endeavor
  • En Alura somos unas de las Scale-Ups seleccionadas por Endeavor, programa de aceleración de las empresas que más crecen en el país.
  • Growth Academy 2021 do Google For Startups
  • Fuimos unas de las 7 startups seleccionadas por Google For Startups en participar del programa Growth Academy en 2021
Alura

Powered by

Caelum

AOVS Sistemas de Informática S.A CNPJ 05.555.382/0001-33

SÍGUENOS EN NUESTRAS REDES SOCIALES

YouTube Facebook Instagram Linkedin Whatsapp Spotify

Cursos

Cursos de Programación
Lógica de Programación | Java
Cursos de Front End
HTML y CSS | JavaScript | React
Cursos de Data Science
Data Science | Machine Learning | Excel | Base de Datos | Data Visualization | Estadística
Cursos de DevOps
Docker | Linux
Cursos de Innovación y Gestión
Transformación Ágil | Marketing Analytics

Alura

  • Educação em Tecnologia

    • logo fiap FIAP
    • logo casa do codigo Casa do Código
    • logo pm3 PM3 - Cursos de Produto
  • Mais Alura

    • logo alura start START BY Alura
    • logo alura lingua Alura Língua
    • logo alura para empresas Alura Para Empresas
    • logo alura latam Alura LATAM
  • Comunidade

    • logo tech guide Tech Guide
    • logo 7 days of code 7 days of code
    • logo Hipsters ponto Jobs Hipsters ponto Jobs
  • Podcasts

    • logo Hipster Network Hipster Network
    • logo Hipsters ponto Tech Hipsters ponto Tech
    • logo Dev sem fronteiras Dev sem Fronteiras
    • logo Like a Boss Like a Boss
    • logo IA Sob Controle IA Sob Controle
    • logo Mesa de Produto Mesa de Produto
    • logo Decode Decode
    • logo FIAPCast FIAPCast