De HeapSort algoritme is een van de snelst sorteeralgoritmes beschikbaar . Programmeurs gebruiken HeapSort in Java , want het is een goede keuze voor zeer grote arrays ze weten dat ze in een ongesorteerde staat . Omwille van efficiency , wordt een effectief boomstructuur niet gebruikt . In plaats daarvan wordt de boom gevormd in plaats , midden in de array . De HeapSort algoritme is een " in de plaats" algoritme , want het vereist geen extra geheugen om de soort te voeren . Instructies 1 Componeer de swap -methode . Dit zal ruilen twee elementen van een array " " public void swap ( int [ ] a , int i , int j ) { int tmp = a [ j ] ; . A [ j ] = a [ i ] , een [ i ] = tmp ;} " " kopen van 2 Schrijf de kern van het algoritme , de siftDown methode . Het wordt gebruikt om zowel de vorm van de heap structuur en doen het eigenlijke sorteren . 3 Zeef grote waarden in de richting van de wortel van de boom en kleine waarden in de richting van de bladeren met de siftDown methode . Als deze methode wordt meerdere keren tijdens het sorteerproces genoemd , wordt het grootste knooppunt consequent gezeefd om de wortel knooppunt en verplaatst naar het einde van de array . Elke knoop n heeft tot twee kinderen , van wie indexen zijn n * 2 + 1 en n * 2 + 2 . " " public void siftDown ( int [ ] a , int begin , int end ) { int root = starten , terwijl ( wortel * 2 + 1 int kind = wortel * 2 + 1 ; //Als het kind een broer of zus en de waarde van het kind is kleiner dan zijn grote broer als ( kind kind + + ; } if ( a [root ] swap ( a , wortel, kind) ; root = kind ; } else { return ; } } } " " 4 Gebruik heapify methode . Deze methode wordt bij het begin van de aard van de oorspronkelijke stapel structuur. kan snel gebeuren , omdat de heap structuur enigszins vaag . het enige vereiste is dat elk hoofdknooppunt groter dan moet kind nodes " " public void heapify ( int [ ] a ) { for ( int start = a.length /2 - 1 ; start > = 0 ; beginnen - ) . siftDown ( a , start , a.length - 1 ) ;} " " 5 Schrijf de HeapSort methode de methode eerste heapifies de array te bereiden op de sorteer de siftDown methode wordt dan weer genoemd omdat de wortel knoop is nu een kleine waarde Dit . . . zeeft een nieuwe grote waarde aan de wortel knooppunt , en het hele proces wordt herhaald totdat de grootte van de heap is een " " public void HeapSort ( int [ ] a ) { heapify ( a ) ; . for ( int einde = a . lengte - 1 ; end > 1 ; end - ) { swap ( een , einde , 0); siftDown ( a , 0 , end - 1 ) ; } } " " Test 6 . de HeapSort methode het volgende voorbeeld toont een klein testprogramma " " public static void main ( String [ ] args ) {int [ ] a = new int [ 10 ] ; . for ( int i = 0; i for (int i = 0 ; i swap ( a , i , i + ( int ) ( Math.random ( ) * ( 9 - i ) ) ) ; System.out.println ( " Vóór sorteren : " ) ; for ( int i = 0 ; i HeapSort ( a ) ; System.out.println ( " Na het sorteren " ) ; for ( int i = 0 ; } i " "
|