Sortering er traditionelt en vanskelig opgave i datalogi. Vælge en sorteringsalgoritme som er effektiv og hurtigt kan være vanskelig . Ofte effektiv algoritme valg indebærer kendskab til de data, der sorteret og specialiserede former arbejder normalt meget bedre end generelle sortering algoritmer. Men visse former , såsom " merge slags , " kan arbejde i generelle situationer ved at nedbryde sæt og sortering mindre stykker rekursivt . Listen
En sammenfletning slags er en " del og hersk " algoritme , idet det tager dele af listerne og hele tiden bryder dem i to halvdele , indtil man kommer enkelte elementer i listen , som derefter fusionerede i rækkefølge. For eksempel begynder med en numerisk liste såsom
5 6 2 4 1 9 8 3 7
Sortering af en liste som denne med en sammenfletning slags vil kræve en halvering af listestørrelsen indtil hver grundtallet eksisterer alene. Derefter kan den slags sammenligne tallene og sætte dem sammen i korrekt rækkefølge ( laveste til højeste , i dette tilfælde) .
Flet Method
merge metoden er ligetil : Hej
def merge (første, anden )
tager to lister , vil metoden flette dem sammen ved at starte ved begyndelsen af hver liste . Derefter tilføjer den næste mindste beløb for hver liste til en ny liste . Resultatet er en sorteret liste . (Husk at korrekt indsætte fane white space efter ", mens " og " hvis /else " udsagn . ) : Hej
mens jeg < len (første) og j < len (anden ) : Hej < p> hvis først [i] <= sekund [ j] : Hej
new_list.append (første [i] )
i = i + 1
andet : < br >
new_list.append (anden [ j] )
j = j + 1}
Endelig, efter én liste slutter, de resterende værdier er placeret i den nye liste : < br >
new_list + = første [i : ]
new_list + = sekund [ j: ]
afkast end_list
Merge sorteringsbetingelser
selve merge slags driver den vigtigste sortering algoritme. Der er to vigtigste funktionelle dele: den betingede aspekt , der stopper rekursionen når listerne er opdelt , og den faktiske rekursion , der halverer listerne. HALT betingelse kommer først : Hej
def mergesort (liste ) : Hej
hvis len (liste ) == 1 : Hej
retur liste
Dette sikrer, at når en sub liste når kun én , skal dette element returneres for at det at blive sammenlagt med de andre numre .
Merge Sort Recursion
Den anden halvdel af den slags er rekursion . Efter den "hvis" erklæring /betinget som følger : Hej
andet : Hej
midt = len (liste ) /2
start = mergesort (liste [ midten: ] )
ende = mergesort (liste [ : midt ] )
retur merge (start , slut)
grund af rekursion , efter at listerne er opdelt i enkelte elementer , algoritmen back sporer op til sidste henrettet metode. Så med den tid, den erklæring, "return merge (start , slut )" henretter , returnerer algoritmen en flettet , sorteret liste af to tidligere fusioneret , sorteret lister over mindre størrelse.
< br >