The heapsort algoritme er en av de raskest sortering algoritmer tilgjengelig. Programmerere bruke heapsort i Java fordi det er et godt valg for svært store matriser de vet å være i en usortert tilstand. For effektivitet skyld, er en faktisk trestruktur ikke brukt. I stedet er det dannet tre bestemte plasser, i matrisen . Den heapsort algoritmen er en " på plass " algoritmen , da det krever ingen ekstra minne til å utføre den slags . Instruksjoner
en
Komponer swap -metoden . Dette vil bytte to elementene i en array " " public static void swap ( int [ ] a, int i , int j ) { int tmp = a [ j ]; . En [ j ] = a [i ], en [ i] = tmp ;} " "
2
Skriv kjernen i algoritmen , den siftDown metoden. Den brukes til både form haugen struktur og gjøre selve sorteringen.
3
sile store verdier mot roten av treet og små verdier mot bladene med siftDown metoden. Ettersom denne metode kalles flere ganger i løpet av sorteringsprosessen , er den største noden gjennomgående siktet til rotnoden og flyttet til enden av rekken . Enhver node n har opp til to barn , hvis indeksene er n * 2 + 1 og n * 2 + 2 . " " public static void siftDown ( int [ ] a, int start , int end) { int root = start , mens ( root * 2 + 1 int barn = root * 2 + 1; //Dersom barnet har søsken og barns verdien er mindre enn sine søsken if ( barn barn + +; } if (a [ root] swap ( a, rot , barn) ; root = barn ; } else {return ;} } } " "
4 < p> Bruk heapify metoden. Denne metoden kalles opp ved begynnelsen av den typen for å lage den første haugen struktur . Dette gjøres raskt , ettersom haugen strukturen er noe uklar . det eneste krav er at hver rotnode må være større enn den underordnede noder " " public static void heapify ( int [ ] a) { for ( int start = a.length /2 - 1; start > = 0; start - ) . siftDown (a, start, a.length - en ) ; } " "
5
Skriv heapSort metoden metoden første heapifies matrisen for å forberede den slags The siftDown metoden kalles da igjen siden rotnoden er nå en liten verdi This. . . sifts en ny stor verdi til rotnoden , og hele prosessen gjentas til størrelsen på haugen er en " " public static void heapSort ( int [ ] a) { heapify ( a) ; . for ( int end = en . lengde - 1; end > 1; end - ) { swap (a, end, 0 ) ; siftDown (a, 0 , end - 1 ) ;} } " "
6
Test . det heapSort metoden følgende eksempel viser en liten test -programmet " " public static void main ( String [] args ) { int [ ] a = new int [ 10 ]; . for ( int i = 0 ; i for ( int i = 0 , jeg swap ( a, i, i + ( int ) ( Math.random ( ) * ( 9 - i) )); System.out.println ( "Før sortering : "); for ( int i = 0 ; jeg heapSort ( a) ; System.out.println ( " etter sortering "); for ( int i = 0; i} " "