Informazioni sul metodo sort () integrato di Python


104

Quale algoritmo utilizza il sort()metodo integrato in Python? È possibile dare un'occhiata al codice per quel metodo?


10
Ovviamente è possibile guardare il codice per il metodo: Python è un progetto open source. Il metodo è probabilmente implementato in C, tuttavia, quindi dovrai conoscere un po 'di C per dargli un senso.
Chris Lutz

La versione è importante?
meder omuraliev

@melder: No =) Voglio solo dare un'occhiata a un algoritmo professionale: P @chris: come?
Johannes

3
Scarica il codice sorgente sull'interprete Python. Non so dove implementano il sort()metodo, o quale sia la formattazione per l'interprete, ma deve essere lì da qualche parte, e scommetto che è implementato in C per problemi di velocità.
Chris Lutz

Ecco un esempio del suo utilizzo
Hari Ganesan

Risposte:


119

Sicuro! Il codice è qui , inizia con la funzione islte procede per MOLTO tempo ;-). Come suggerisce il commento di Chris, è codice C. Dovrai anche leggere questo file di testo per una spiegazione testuale, risultati, ecc.

Se preferisci leggere il codice Java rispetto al codice C, potresti guardare l'implementazione di timsort di Joshua Bloch in e per Java (Joshua è anche il ragazzo che ha implementato, nel 1997, il mergesort modificato che è ancora utilizzato in Java, e si può sperare che Java lo farà eventualmente passare al suo recente port di timsort).

Qualche spiegazione del port Java di timsort è qui , il diff è qui (con puntatori a tutti i file necessari), il file chiave è qui - FWIW, mentre io sono un programmatore C migliore del programmatore Java, in questo caso trovo Il codice Java di Joshua è complessivamente più leggibile del codice C di Tim ;-).


4
@ Chris, "Sfoglia sorgenti Python" è una scorciatoia in tutte le barre dei segnalibri del mio browser: punta a svn.python.org/view/python/trunk ;-).
Alex Martelli

Voglio sapere cosa fa la funzione list_ass_item(). :)
Chris Lutz

2
Esegue l'assegnazione a un elemento dell'elenco (proprio come list_ass_slice esegue l'assegnazione a una sezione dell'elenco), niente a che fare con l'ordinamento. Immagino che l'abbreviazione di "incarico" renda il nome divertente ...
Alex Martelli

3
L'attuale versione di listsort.txtaggiunge alcune note che affrontano le confusioni comuni.
Tim Peters


9

Nelle prime versioni di python, la funzione sort implementava una versione modificata di quicksort. Tuttavia, è stato ritenuto instabile e dalla 2.3 sono passati all'utilizzo di un algoritmo Mergesort adattivo.


quicksort non è "ritenuto instabile" - dalle definizioni comunemente usate, quicksort è instabile - cioè l'ordine originale di due oggetti non viene conservato, se sono uguali durante questo ordinamento. Avere un algoritmo di ordinamento instabile significa che devi inventare ogni sorta di `` magia '' per ordinare in modo sensato i dati con più criteri, piuttosto che semplicemente essere in grado di concatenare le chiamate di ordinamento - in timsort se vuoi ordinare per DOB e quindi nome , devi semplicemente ordinare prima per nome e poi DOB Non puoi farlo con Quicksort
Tony Suffolk 66
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.