¿Qué algoritmo utiliza el método sort() incorporado de Python?

3 minutos de lectura

¿Qué algoritmo está incorporado? sort() método en Python usando? ¿Es posible echar un vistazo al código de ese método?

  • Por supuesto, es posible mirar el código del método: Python es un proyecto de código abierto. Sin embargo, es probable que el método esté implementado en C, por lo que tendrá que saber un poco sobre C para entenderlo.

    – Chris Lutz

    4 oct 2009 a las 20:50

  • ¿Importa la versión?

    – meder omuraliev

    4 oct 2009 a las 20:50

  • @melder: No =) Solo quiero echar un vistazo a un algoritmo profesional 😛 @chris: ¿cómo?

    usuario89862

    4 oct 2009 a las 20:51

  • Descargue el código fuente al intérprete de Python. no se donde implementan el sort() método, o cuál es el formato del intérprete, pero tiene que estar allí en alguna parte, y apuesto a que está implementado en C por cuestiones de velocidad.

    – Chris Lutz

    4 oct 2009 a las 20:54

  • Aquí hay un ejemplo de cómo se usa

    – Hari Ganesan

    04/02/2014 a las 17:21

Avatar de usuario de Alex Martelli
alex martelli

¡Seguro! el codigo aquícomenzando con la función islt y procediendo durante BASTANTE tiempo ;-). Como sugiere el comentario de Chris, es código C. También querrás leer este archivo de texto para una explicación textual, resultados, etc etc.

Si prefiere leer código Java que código C, puede ver la implementación de timsort de Joshua Bloch en y para Java (Joshua también es el tipo que implementó, en 1997, el mergesort modificado que todavía se usa en Java, y uno puede esperar que Java finalmente cambiará a su puerto reciente de timsort).

Alguna explicación del puerto Java de timsort es aquíla diferencia es aquí (con punteros a todos los archivos necesarios), el archivo clave es aquí — FWIW, aunque soy mejor programador de C que programador de Java, en este caso encuentro que el código Java de Joshua es más legible en general que el código C de Tim ;-).

  • @Chris, “Examinar fuentes de Python” es un atajo en todas las barras de marcadores de mis navegadores: apunta a svn.python.org/view/python/trunk ;-).

    – Alex Martelli

    4 oct 2009 a las 21:05

  • quiero saber cual es la funcion list_ass_item() hace. 🙂

    – Chris Lutz

    4 oct 2009 a las 21:10

  • Realiza la asignación a un elemento de la lista (al igual que list_ass_slice realiza la asignación a una porción de la lista), nada que ver con la clasificación. Supongo que la abreviatura de “asignación” hace que el nombre sea gracioso…

    – Alex Martelli

    4 oct 2009 a las 23:22

  • la versión actual de listsort.txt agrega algunas notas que abordan confusiones comunes.

    – Tim Peters

    18 de diciembre de 2013 a las 10:03

Avatar de usuario de Silververstrom
Silfverstrom

En las primeras versiones de Python, el sort implementó una versión modificada de quicksort. Sin embargo, en 2.3 esto se reemplazó con un algoritmo mergesort adaptativo, para proporcionar un estable ordenar por defecto.

  • quicksort no se ‘considera inestable’; según las definiciones comúnmente utilizadas, quicksort es inestable, es decir, el orden original de dos objetos no se conserva, si son iguales durante esta clasificación. Tener un algoritmo de ordenación inestable significa que tiene que idear todo tipo de “magia” para ordenar los datos de manera sensata con múltiples criterios, en lugar de simplemente poder encadenar llamadas de ordenación, en timsort si desea ordenar por fecha de nacimiento y luego nombrar , simplemente ordena por nombre primero y luego por fecha de nacimiento No puede hacer eso con ordenación rápida

    – Tony Suffolk 66

    30 de julio de 2020 a las 6:19

  • @ TonySuffolk66 Creo que el autor de esta respuesta puede haber estado leyendo la documentación en ese momento y malinterpretó “estable” como una referencia a la calidad del software, en lugar de una propiedad de los algoritmos de clasificación. Edité la respuesta para que quede claro sobre el significado y agregué un enlace de referencia para ese concepto.

    – Karl Knechtel

    14 de enero a las 9:14


¿Ha sido útil esta solución?