Vitajte na [www.pocitac.win] Pripojiť k domovskej stránke Obľúbené stránky
Definujte funkciu " mergesort " . Táto základná funkcia rekurzívne volá sama seba , rozdelenie veľkosti zoznamu v polovici s každou výzvou . Akonáhle je funkcia mergesort hity zoznam s jedným prvkom , rekurzia sa zastaví a vráti prvok . Ako mergesort rekurzia odvíja , každý menšie zoznam zlúčené v zoradení poradí . Tento príklad zobrazuje základné funkcie mergesort , ktorá berie zoznam ako argument :
>>> def mergesort ( ak ) :
. . . v prípade , ľan ( ak ) < 2 :
. . . návrat Ak
. . . mid = ľan ( ak ) /2
. . . prvý = mergesort ( ak [ : stredná ] )
. . . posledný = mergesort ( ak [ mid : ] )
. . . návrat korešpondencie ( prvý , posledný )
2
Nastavte metódu zlúčenie . Táto funkcia bude slúžiť ako metóda triedenia , vráti zoradený zoznam prvkov . Táto metóda merge má dve už zoradené zoznamy . To potom definuje vnútorný zoznam " zoradené " , ktorý bude reprezentovať kombinovanej zoznamy zotriedené argumentov . Metóda zlúčenie Dosahuje to tým , že najmenší prvok a vložiť ho do nového zoznamu " triedeného " . Potom, čo jeden zo zoznamov skončí , druhý list je vložený v celom rozsahu celým
>>> def zlúčiť ( x , y ) : . Celým
. . . zoradené = [ ]
3
Zlúčenie zoznamov v metóde korešpondencie . " Zatiaľ čo " slučka v príklade porovnáva jednotlivé položky zoznamu podľa bodu , pričom najmenší prvok a vloží ho do nového zoznamu " triedeného " . Potom, čo jeden zo zoznamov končí , druhý zoznam je vložený v plnom rozsahu , a nová radené zoznam je vrátený :
. . . i , j = 0 , 0
. . . pričom i < ľan ( x ) a j < ľan ( y ) :
. . . ak x [ i ] < = y [ j ] :
. . . sorted.append ( x [ i ] )
. . . i + = 1
. . . else :
. . . sorted.append ( y [ j ] )
. . . j + = 1
. . . radené + = x [ i : ]
. . . radené + = y [ : j ]
. . . návrat radené