Sorting is traditioneel een moeilijke taak in de informatica . Het kiezen van een sorteer-algoritme dat efficiënt en snel kan moeilijk zijn . Vaak , efficiënt algoritme keuze impliceert kennis van de gegevens die worden gesorteerd , en gespecialiseerde soorten werken meestal veel beter dan algemene sorteren algoritmen . Echter , bepaalde soorten , zoals de " merge sort , " kan in algemene situaties werken door het afbreken van sets en sorteren van kleinere stukken recursief . De Lijst Een merge sort is een " verdeel en heers " -algoritme , dat het duurt gedeelten van de lijsten en breekt ze continu in twee helften tot het bereiken van enkele elementen van de lijst , die vervolgens worden samengevoegd in orde . Bijvoorbeeld , te beginnen met een numerieke lijst zoals 5 6 2 4 1 9 8 3 7 sorteren van een lijst als deze met een merge sort zal vereisen halvering herhaaldelijk de lijst grootte tot elkaar stamnummer bestaat alleen. Vervolgens kan het soort de nummers vergelijken en zet ze samen in de juiste volgorde (oplopend , in dit geval ) . De Merge Method Het samenvoegen methode is ongecompliceerd : def merge ( eerste, tweede ) op Twitter nemen twee lijsten , zal de methode ze samensmelten door te beginnen bij het begin van elke lijst . Vervolgens voegt de volgende minste hoeveelheid van elke lijst in een nieuwe lijst . Het resultaat is een gesorteerde lijst . ( Vergeet niet om goed te voegen tabblad witruimte na de " terwijl" en " if /else " verklaringen . ) : Terwijl i < len ( eerste ) en j < len ( tweede ) : als eerste [ i ] < = tweede [ j ] : new_list.append ( eerste [ i ] ) op Twitter i = i + 1 anders : < br > new_list.append ( tweede [ j ] ) op Twitter j = j + 1 } Eindelijk, na een lijst eindigt , de overige waarden worden geplaatst in de nieuwe lijst : < br > new_list + = eerste [ i : ] new_list + = tweede [ j : ] terugkeer end_list Merge Sort voorwaarden de werkelijke merge sort drijft de belangrijkste sorteeralgoritme . Er zijn twee belangrijke functionele delen : de voorwaardelijke aspect dat de recursie als de lijsten worden onderverdeeld en de werkelijke recursie dat de lijsten helften stopt . De halt aandoening komt eerst : def mergesort ( lijst) : If Len ( lijst) == 1 : terugkeer lijst Dit zorgt ervoor dat wanneer een sub- lijst de tweede helft van bereikt slechts een element , dat element wordt geretourneerd , zodat zij te worden samengevoegd met de andere nummers . Merge Sort Recursion de soort is de recursie . Naar aanleiding van de " if" statement /voorwaardelijk , als volgt : anders : midden = len ( lijst ) /2 start = mergesort ( lijst [ midden : ] ) end = mergesort ( lijst [ : midden] ) return merge ( begin , einde ) op Twitter Vanwege recursie , nadat de lijsten worden onderverdeeld in afzonderlijke elementen , het algoritme back -beslag tot de laatst uitgevoerde methode . Dus tegen de tijd dat de uitspraak " return merge ( begin , einde ) " uitvoert , het algoritme geeft een gefuseerde , gesorteerde lijst van de twee eerder samengevoegd , gesorteerd lijsten van kleinere omvang . < br > |