Sortering är traditionellt en svår uppgift i datavetenskap . Välja en sortering algoritm som är effektiv och snabb kan vara svårt . Ofta innebär effektiv algoritm val kunskap av data sorteras, och specialiserade typer brukar fungera mycket bättre än generaliserade sorteringsalgoritmer . Men vissa sorter , som " merge sort , " kan fungera i allmänna situationer genom att bryta ner satser och sortering mindre bitar rekursivt . Listan
En sammanfogning sort är en " söndra och härska " algoritm , i att det tar delar av listorna och ständigt bryter dem i halvor tills man når enstaka delar av listan , som sedan samman i ordning. Till exempel börja med en numerisk lista som
5 6 2 4 1 9 8 3 7
Sortera en lista som denna med en merge sort kräver halvera listan storlek tills varje bastal existerar ensam. Sedan kan sortera jämföra siffrorna och sätta ihop dem i rätt ordning (lägsta till högsta , i det här fallet ) .
Merge Method
merge metoden är okomplicerad :
def merge ( första , andra ) katalog
med två listor , kommer metoden slå ihop dem genom att starta i början av varje lista . Det lägger sedan nästa minsta varje lista till en ny lista . Resultatet är en sorterad lista . ( Kom ihåg att ordentligt fliken Infoga tomt utrymme efter " medan " och " if /else " uttalanden . ) :
Medan jag < len ( första ) och j < len ( andra ) :
om första [ i] < = sekund [ j ] :
new_list.append ( första [ i] ) katalog
i = i + 1
annat :
new_list.append ( andra [ j ] ) katalog
j = j + 1 }
Slutligen, efter en lista ändar , är de återstående värdena placeras i den nya listan :
new_list + = första [ I: ]
new_list + = sekund [ j: ]
retur end_list Addera ditt Merge Sortera villkor
själva merge sort driver huvudsakliga sorteringsalgoritm . Det finns två huvudsakliga funktionella delar : den villkorliga aspekten som stoppar rekursion när listorna delas och den faktiska rekursion som halverar listorna . Den halt villkoret kommer först :
def mergesort ( lista ) :
If Len ( lista ) == 1 :
retur lista
Detta säkerställer att när en sub lista når endast ett element , som element returneras för att den ska slås ihop med de andra numren . Addera Merge Sort rekursion
andra halvan av sorteringen är rekursion . Efter " om " uttalande /villkorligt , enligt följande :
annat :
mitten = len ( lista ) /2 Review
start = mergesort ( lista [ mitten : ] )
slut = mergesort ( lista [ : mitten ] ) katalog
retur merge ( start , slut ) katalog
grund av rekursion , efter att listorna är uppdelade i enskilda element , algoritmen tillbaka spårar upp till den senast utförda metoden . Så , när meddelandet " avkastning merge ( start , slut) " utför , återgår algoritmen ett sammanslaget , sorterad lista på två tidigare applicerade sorterat , förteckningar över mindre storlek .