Vitajte na [www.pocitac.win] Pripojiť k domovskej stránke Obľúbené stránky

Domáce Hardware Siete Programovanie Softvér Otázka Systémy

Rekurzívne Merge Sort v Pythone

Radenie je tradične náročná úloha v informatike . Výber radenie algoritmus , ktorý je účinný a rýchly môže byť ťažké . Často , efektívny algoritmus pre výber zahŕňa vedomosti týchto dát zoradené a špecializované druhy zvyčajne pracujú oveľa lepšie ako generalizované triedenie algoritmy . Avšak , niektoré druhy , ako je napríklad " zlúčiť druh , " môže pracovať vo všeobecných situáciách sa pokazí súbory a triedenie menšie kúsky rekurzívne . Zoznam

merge sort " rozdeľ a panuj " algoritmus , v tom , že sa časti zoznamov a neustále rozbije je do polovice až do dosiahnutia jednotlivých prvkov zo zoznamu , ktoré sú potom zlúčené do poradí . Napríklad , začať s číselným zoznamom ako

5 6 2 4 1 9 8 3 7

Triedenie zoznamu ako to s zlučovacie druhu bude vyžadovať znížiť veľkosť zoznamu , kým každý základné číslo existuje sám . Potom , triedenie môžete porovnať čísla a dať ich dohromady v správnom poradí ( od najnižšej po najvyššiu , v tomto prípade ) .
Metóda Merge

metóda zlúčenie je jednoduché :

def zlúčenie ( prvý, druhý )

Užívanie dva zoznamy , bude metóda spojiť ich dohromady tým , že začína na začiatku každého zoznamu . To potom pripojí ďalší najmenšie množstvo každého zoznamu do nového zoznamu . Výsledkom je ďalej zoznam . ( Nezabudnite správne vložiť kartu prázdne miesto po " , zatiaľ čo " a " if /else " vyhlásenie . ) :

Zároveň i < ľan ( prvý ) a j < ľan ( s ) :

ak prvý [ i ] < = druhý [ j ] :

new_list.append ( prvá [ i ] )

i = i + 1

inde :

new_list.append ( druhý [ j ] ) celým

j = j + 1 } celým

Nakoniec , po skončení jeden list , zostávajúce hodnoty sú umiestnené v novom zozname :

new_list + = prvá [ i : ]

new_list + = druhý [ j : ]

vrátiť end_list
Merge Sort podmienky

skutočná korešpondencie druh poháňa hlavné triediace algoritmus . Tam sú dve hlavné funkčné časti : podmienené aspekt , ktorý zastavuje rekurziu , akonáhle zoznamy sú rozdelené a aktuálne rekurziu , ktorá rozpoľujú zoznamy . Stav zastavenia je na prvom mieste :

def mergesort ( zoznam ) :

ak ľan ( zoznam ) == 1 :

vrátiť zoznam

Tým je zaistené , že keď čiastkové zoznam dosahuje iba jeden prvok , tento prvok sa vráti , aby pre to , aby sa spojil s ostatnými číslami .
Merge Sort Rekurzia

Druhá polovica druh je rekurzia . Po " keby " vyhlásenie /podmienená , takto :

inde :

stredná = ľan ( zoznam ) /2

start = mergesort ( zoznam [ middle : ] )

end = mergesort ( zoznam [ : stredná ] )

návrat merge ( začiatok , koniec )

Vzhľadom k tomu , rekurzia , po zoznamy sú rozdelené do jednotlivých prvkov , algoritmus späť sleduje až do posledného vykonaného metódou . Takže v čase, keď vyhlásenie " návrat merge ( začiatok , koniec ) " spustený , vráti algoritmus zlúčenie radené zoznam dvoch predtým zlúčené , radené zoznamy menšej veľkosti .

Najnovšie články

Copyright © počítačové znalosti Všetky práva vyhradené