Come unire una sorta di Python

March 6

Come unire una sorta di Python


Ordinamento di elenchi di dati è un problema che ha irritato i programmatori fin dall'inizio della programmazione di computer. Ordinamento qualsiasi elenco di dati può finire come un compito memoria-e ad alta intensità di tempo. A causa di questo, diversi metodi di ordinamento sono stati inventati per minimizzare la sfida e lo sforzo di ordinamento. Un metodo è unire ordinamento. Si suddivide una lista ricorsivamente in elementi singolari e ricombina l'elenco ordinato in forma. Ogni linguaggio di programmazione che supporta la ricorsione, come Python, può implementare un merge sort.

istruzione

1 Definire la funzione "Mergesort". Questa funzione di base si chiama in modo ricorsivo, dividendo la dimensione lista a metà con ogni chiamata. Una volta che la funzione Mergesort colpisce una lista con un elemento, la ricorsione si ferma e l'elemento ritorna. Come la ricorsione mergesort si svolge, ogni lista più piccola si fonde insieme in modo ordinato. Questo esempio mostra una funzione Mergesort base che prende una lista come argomento:

def mergesort (Li):

. . . se len (Li) <2:

. . . Li ritorno

. . . metà = len (Li) / 2

. . . prima = mergesort (li [: metà])

. . . ultima = mergesort (li [metà:])

. . . ritorno merge (primo, ultimo)

2 Impostare il metodo di fusione. Questa funzione servirà come metodo di ordinamento; restituisce una lista ordinata di elementi. Il metodo di fusione prende due liste già ordinati. Si definisce quindi un elenco interno "ordinato", che rappresenterà le liste di argomenti ordinati combinati. Il metodo di fusione realizza questo prendendo il più piccolo elemento e inserendolo in una nuova lista "ordinato". Una volta che uno degli elenchi estremità, l'altra lista è inserita nella sua interezza.

def merge (x, y):

. . . ordinato = []

3 Unire le liste nel metodo di unione. Il ciclo "while" nell'esempio confronta ogni elemento della lista per voce, prendendo l'elemento più piccolo e inserendola in un nuovo elenco "ordinato". Una volta che uno degli elenchi estremità, l'altra lista è inserita nella sua interezza, e la nuova lista ordinata viene restituito:

. . . i, j = 0, 0

. . . mentre i <len (x) e j <len (y):

. . . se x [i] <= y [j]:

. . . sorted.append (x [i])

. . . i + = 1

. . . altro:

. . . sorted.append (y [j])

. . . j + 1 =

. . . ordinato + = x [I:]

. . . ordinato + = y [: j]

. . . tornare ordinato