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

Ako používať heapsort v Jave

heapsort algoritmus je jeden z najrýchlejších algoritmov radenia dispozícii . Programátori používajú heapsort v jazyku Java , pretože je to dobrá voľba pre veľmi veľké pole vedia , že je v netriedeného stave . Z dôvodu efektívnosti je , skutočný strom štruktúra nie je používaný . Namiesto toho , strom sa tvoril v mieste , priamo v poli . Heapsort algoritmus je " na mieste " algoritmus , pretože nevyžaduje žiadnu ďalšiu pamäť vykonať radenie . Pokyny dovolená 1

kompozíciu metódu odkladacia . Tento vymenia dva prvky poľa " , " public static void Swap ( int [ ] , int i , int j ) { int tmp = [ j ] ; . [ J ] = [ i] ; [ i ] = tmp ; } " "
2

Napíšte jadro algoritmu , metódy siftDown . Používa sa ako tvoriť štruktúry haldy a robiť skutočné druh .
3

Sift veľké hodnoty na koreň stromu a malých hodnôt smerom listov s metódou siftDown . Keďže táto metóda sa nazýva viackrát počas procesu triedenia , najväčší uzol je dôsledne preosiať do koreňového uzla a presunutý na koniec poľa . Každý uzol n má až dve deti , ktorých indexy n * 2 + 1 a n * 2 + 2. " " Public static void siftDown ( int [ ] , int start , int end ) { int root = spustiť , zatiaľ čo ( root * 2 + 1 int dieťa = root * 2 + 1 , //Ak má dieťa súrodencov a hodnota dieťaťa je menší ako jeho súrodenec , ak ( dieťa dieťa + + ; } if ( [ root ] pre swap ( a , koreň , dieťa ) , root = dieťa ; } else { return ; } } } " "
4

Použitie heapify metódu . Táto metóda sa nazýva na začiatku tohto druhu , na vytvorenie počiatočnej štruktúry haldy . To sa vykonáva rýchlo , pretože štruktúra je trochu nejasný haldy . Jedinou požiadavkou je , že každý koreňový uzol musí byť väčší ako . podriadené uzly " , " public static void heapify ( int [ ] ) { for ( int start = a.length /2 - 1 ; spustiť > = 0; štart - ) siftDown ( , štart , a.length - 1 ) ... } " "
5

Napíšte metódu heapsort metóda prvej heapifies pole pre prípravu takého metóda siftDown je potom volal znova , pretože koreňový uzol je teraz malá hodnota tejto prešetruje novú veľkú hodnotu na koreňový uzol , a celý proces sa opakuje , kým veľkosť haldy je jeden " " public static void heapsort ( int [ ] ) { heapify ( ) ; . for ( int koniec = . dĺžka - 1 ; koniec > 1 ; end - ) { pre swap ( a , koniec , 0 ) ; siftDown ( , 0 , koniec - 1 ) ; } } " "
6

test . Metóda heapsort Nasledujúci príklad ukazuje malý testovací program " " public static void main ( String [ ] args ) { int [ ] = new int [ 10 ] ; . for ( int i = 0 ; i for ( int i = 0 , aj vymeniť ( a , i , i + ( int ) ( Math.random ( ) * ( 9 - i ) ) ) ; System.out.println ( " Pred triedenie : " ) ; for ( int i = 0 ; i heapsort ( A ) System.out.println ( " Po vytriedení " ) ; for ( int i = 0 ; i } " "

Najnovšie články

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