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

Algoritmo Quicksort: cómo implementar en Python

Brendo Matos
Brendo Matos
12/06/2022

Compartir

algoritmo-quicksort-implementar-python

Ya hemos implementado la solución de clasificación de listas de estudiantes de dos maneras diferentes y hemos visto que MergeSort funciona mucho mejor en comparación con SelectionSort.

Entonces, ¿es MergeSort la mejor solución de clasificación que existe?

Ahora implementemos otra solución y luego haremos una pequeña comparación.

Seguiremos los siguientes pasos para alcanzar nuestro objetivo:

Elegiremos un pivote (en este caso, el primer elemento de la lista) y cambiaremos su posición con el elemento en el medio; Repasemos toda la lista y verifiquemos elemento por elemento, comparándolos con el pivote. A partir de entonces: Si el ítem está en una posición más baja que el pivote en orden alfabético, será transferido o mantenido en la lista de la izquierda; Si el elemento está en una posición superior al pivote en orden alfabético, se transferirá o se mantendrá en la lista de la derecha. Haciendo esto recursivamente, al final tendremos una lista ordenada

¿Lo Implementamos?

def importar_lista(archivo):
    lista = []
    with open(archivo) as tf:
        lines = tf.read().split('","')
    for line in lines:
        lista.append(line)
    return lista
def ordenar(lista):
    tamano_de_lista = len(lista)
    if tamano_de_lista > 0:
        quick_sort(lista, 0, tamano_de_lista - 1)
def quick_sort(lista, inicio, fin):
    if inicio > fin:
        return
    anterior = inicio
    posterior = fin
    pivo = lista[inicio]
    while anterior < posterior:
        while anterior < posterior and lista[posterior] > pivo:
            posterior = posterior - 1
        if anterior < posterior:
            lista[anterior] = lista[posterior]
            anterior = anterior + 1
        while anterior < posterior and lista[anterior] <= pivo:
            anterior = anterior + 1
        if anterior < posterior:
            lista[posterior] = lista[anterior]
            posterior = posterior - 1
        lista[anterior] = pivo
    quick_sort(lista, inicio, anterior - 1)
    quick_sort(lista, anterior + 1, fin)
def main():
    lista_de_alumnos = importar_lista('../data/lista_alumnos')
    ordenar(lista_de_alumnos)
    for nombre in lista_de_alumnos:
        print(nombre)
if __name__ == "__main__":
    main()

Notamos que el rendimiento con el que se desempeñó QuickSort es muy similar al de MergeSort, ¿no es así? ¿Y la complejidad? ¿Los comparamos?

Al igual que en MergeSort, dividimos la lista recursivamente, pero no necesariamente a la mitad, sino desde un pivote. Esto nos recuerda la notación O(lg N), ¿verdad?

Además, debemos tener en cuenta que, con cada llamada recursiva, repasamos toda la lista para asegurarnos de que todos los alumnos cuyos nombres estén en una posición inferior al pivote en orden alfabético estén a su izquierda. Los estudiantes con nombres más altos que el pivote en orden alfabético deben estar a su derecha (como se muestra en la imagen a continuación), lo que nos recuerda a un algoritmo lineal, ¿verdad? Una vez más, absolutamente. Entonces podemos determinar que esto nos da la complejidad O(N lg N) al igual que en MergeSort.

imagem1(articulo3)

Ahora, ¿el algoritmo QuickSort se ejecuta en O(N lg N) en cualquier escenario? ¿Cuáles serían las diferencias de eficiencia entre QuickSort y MergeSort, ya que siempre parecen tener la misma complejidad? ¿Cuál es el mejor algoritmo?

Explicamos con más profundidad esta comparación entre los algoritmos QuickSort y MergeSort después de comprender mejor la Notación BigO.

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

Artículo Anterior
Algoritmo MergeSort: cómo implementarlo en Python
Siguiente Artículo
Búsqueda binaria: aprende a implementar en Python

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