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

Merge Sort v kódu v jazyku Java

Radenie zoznamy dát predstavuje jeden z náročnejších problémov pre programátorov , pretože je ťažké conceptualize a implementovať efektívne triedenie algoritmy v programovacích jazykoch . Triedenie vyžaduje značnú kopírovanie , presúvanie a čítanie dát pracovať . Preto , programátori sa zameriavajú na vývoj účinného a všeobecné triedenie algoritmy . Jeden z nich , merge sort , funguje tak , že sa zoznam hodnôt znova a znova rekurzívne " rozdeľ a panuj " problém . Vzhľadom k tomu , merge sort je určený ako všeobecné riešenie , väčšina jazykov , vrátane Java , majú spôsoby , ako ju realizovať . Zlúčení tried

zlúčiť druh sa zoznam mohol byť triedený a rekurzívne delí zoznamu až do dosiahnutia jednotlivých hodnôt , napríklad jednotlivých čísel . Triedenie potom recombines čísla v triedenom poriadku , nakoniec vracia zoradený zoznam . Základné triedenie triedy v Jave bude obsahovať zoznam zoradiť , a zavolajte hlavné zlúčenie klasifikácia funkcií je definuje :

triedy zlúčiť {

public int [ ] x ;

public static void main ( String [ ] args ) {

x = [ 5 , 6 , 3 , 4 , 7 , 8 , 10 , 2 ] ;

mergesort ( x , 0 , x . dĺžka - 1 ) ;

} }
Merge Sort funkcie

Mimo hlavnej triedy bude bývať funkcia merge sort . Táto funkcia segmenty rozsah čísel triediť do zoznamu . Spočiatku bude táto rada predstavuje celý zoznam , ale ako zlúčenie druh pokračovať , bude to trvať len polovicu zoznamu až do dosiahnutia jednotlivé položky . Potom bude funkcia merge sort zlučujú prvky do veľkých zoznamov , ktoré sú zoradené ( Zdroj 2 ) :

public void mergesort ( int nízka , int hi ) {

if ( low < hi ) { int stredná = ( low + hi ) /2 ; mergesort ( nízka , stredná ) , mergesort ( stredná + 1 , hi ) , zlúčiť ( nízka , stredná , hi ) ; } }

Základné Merge funkcie

funkcia merge spojí dva zoznamy po ich triedenie . Keď je funkcia prijíma jednotlivé prvky , bude to objednať . V opačnom prípade bude trvať dva oddelené zoznamy , a v závislosti na túžbe , aby im programátor vo vzostupnom alebo zostupnom poradí :

private void merge ( int nízka , int stredná , int hi ) {

int [ ] kopírovať = new int [ x.length - 1 ] ;

//kopírovať obe časti do pomocnej poľa for ( int i = nízka , i < = hi , i + + ) { COPY [ i ] = x [ i ] ; }

int i = nízke ; int j = stredná + 1 , int k = nízka ; while ( i < = stredná && j < = hi ) { if ( kópia [ i ] < = kopírovať [ j ] ) { x [ k ] = kopírovať [ i ] ; i + + ; } else { x [ k ] = kopírovať [ j ] ; j + + ; } k + + ; } //kopírovať zvyšok na ľavej strane poľa do cieľového poľa while ( i < = mid ) { x [ k ] = kopírovať [ i] ; k + + ; i + + ; }

}

Zlúčiť Zoradiť rekurzívne

funkcie " mergesort " rekurzívne delí na zoznam . Po prvé , to rozdeľuje pôvodný zoznam v polovici zakaždým , keď je rekurzívne volá sama seba . Keď rekurzia dosiahne jednu číslicu , funkcie a potom ustúpi a začne na zákazku zoznamu . Zakaždým , funkcie ustupujú do predchádzajúceho volanie funkcie , to sa spoja dve polovice menšie zoznam , nakoniec pracovať späť na úplný zoznam . " Zlúčiť " funkcie Zdá sa , že robiť ťažkú ​​prácu tým , že usporiada a kopírovanie hodnôt do zoznamu , ale srdce zlúčenie druhu je v zdanlivo jednoduchou funkciou " mergesort " .


Najnovšie články

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