Sortering er tradisjonelt en vanskelig oppgave i informatikk. Velge en sortering algoritme som er effektiv og fort kan være vanskelig. Ofte innebærer effektiv algoritme valg kunnskap om data blir sortert , og spesialiserte sorterer vanligvis fungerer mye bedre enn generaliserte sortering algoritmer . Men visse typer , som for eksempel " merge slags , " kan fungere på en generell situasjoner ved å bryte ned settene og sortering mindre biter rekursivt . The List
merge sort er en " splitt og hersk " algoritmen , i at det tar deler av listene og kontinuerlig bryter dem i halvdeler inntil nå enkeltelementer av listen , som deretter flettes i rekkefølge. For eksempel begynne med en nummerert liste som
5 6 2 4 1 9 8 3 7
Sortere en liste som dette med en flette typen vil kreve halvere listelengde gjentatte ganger til hver grunnleggende tall foreligger alene. Deretter kan den slags sammenligne tallene og sette dem sammen i riktig rekkefølge ( lavest til høyest , i dette tilfellet) .
Merge Method
merge metoden er enkel : en
def merge (første , andre )
Tar to lister , vil metoden flette dem sammen ved å starte i begynnelsen av hver liste . Deretter tilføyer den neste minste mengde av hver liste inn i en ny liste . Resultatet er en sortert liste . ( Husk å skikkelig sette tab hvit mellomrom etter "mens " og " hvis /annet " uttalelser . ) : En
mens i < len ( først) og j < len ( andre ) :
< p> hvis første [ i] < = andre [ j ] : en
new_list.append ( første [ i] )
i = i + 1
annet :
new_list.append ( andre [ j ] )
j = j + 1 }
Endelig, etter en liste slutter, er de resterende verdiene plasseres i den nye listen :
new_list + = første [i : ]
new_list + = andre [ j : ]
retur end_list
Merge Sorter betingelser
selve flettingen slags driver den viktigste sortering algoritme . Det er hovedsakelig to funksjonelle deler: betinget aspekt som stopper rekursjon når listene er delt og den faktiske rekursjon som halverer listene . Den stoppet opp tilstanden kommer først : en
def mergesort (liste ) : en
hvis len (liste ) == 1 : en
retur listen
p Dette sikrer at når en sub liste når bare ett element , som element er returnert i for at den skal bli slått sammen med de andre tallene .
Merge Sorter Rekursjon
den andre halvdelen av den slags er rekursjon . Etter " hvis " statement /betinget , som følger : en
annet : en
midten = len (liste ) /2
start = mergesort (liste [ midten : ] )
end = mergesort (liste [ : midten ] )
retur merge (start , slutt)
grunn av rekursjon , etter at listene er delt inn i enkeltelementer , algoritmen tilbake sporer opp til det sist utførte metode . Så , etter den tid påstanden "return merge (start , slutt) " utfører , returnerer algoritmen et fusjonert , sortert liste med to tidligere slått sammen , sortert lister over mindre størrelse .