Sortering datalister er et problem, der har ærgret programmører siden begyndelsen af edb-programmering . Sortering enhver liste af data kan ende som en hukommelse - og tidskrævende opgave. På grund af dette, har forskellige slags metoder er blevet opfundet for at minimere udfordringen og kræfter på sortering. En metode er fusionere sortering . Det opdeler en liste rekursivt ind ental elementer og splejset listen i sorteres formular. Ethvert programmeringssprog , der understøtter rekursion , såsom Python, kan implementere en sammenfletning slags. Ting du skal
Python Interpreter med Interactive Development Environment
Vis Flere Instruktioner
1
Definer " mergesort "-funktion. Denne grundlæggende funktion kalder sig rekursivt , opdele listen størrelse i halvdelen med hvert opkald. Når mergesort funktionen rammer en liste med et element , rekursionen stopper og elementet afkast. Da de mergesort rekursion afvikler , er hver mindre liste fusioneret sammen i sorteret orden . Dette eksempel viser en grundlæggende mergesort funktion, der tager en liste som et argument : Hej
>>> def mergesort ( li ) : Hej
. . . hvis len ( li ) <2 : Hej
. . . tilbage li
. . . mid = len ( li ) /2
. . . først = mergesort ( li [ : mid ] )
. . . sidste = mergesort ( li [ mid : ] )
. . . tilbage fusionere ( første, sidste )
2
Opsæt sammenfletningen metoden. Denne funktion vil fungere som sortering metode den returnerer en sorteret liste over elementer. Sammenfletningsværktøjet metode tager to allerede sorterede lister . Derefter definerer en intern liste " sorteres ", der vil repræsentere de kombinerede sorteret argument lister. Sammenfletningsværktøjet metoden opnår dette ved at tage det mindste element , og indsætte det i en ny liste " sorteres " . Når en af de lister ender , den anden liste, indsat i sin helhed
>>> def merge (x, y): .
. . . sorteres = [ ]
3
Flet listerne i sammenfletningen metoden. Den " mens" loop i eksemplet sammenligner hver liste punkt for punkt , idet det mindste element , og indsætte det i en ny liste " sorteres " . Når en af listerne ender , den anden liste, indsat i sin helhed, og den nye sorteret liste returneres : Hej
. . . i, j = 0 , 0
. . . mens jeg < len (x) og j < len (y) : Hej
. . . hvis x [i] < = y [ j] : Hej
. . . sorted.append (x [i] )
. . . i + = 1
. . . ellers : Hej
. . . sorted.append (y [ j] )
. . . j + = 1
. . . sorteres + = x [ I: ]
. . . sorteres + = y [ : j]
. . . returnere sorteres