O algoritmo heapsort é um dos algoritmos de classificação mais rápida disponível . Os programadores usam heapsort em Java porque é uma boa escolha para matrizes muito grandes sabem ser em um estado indiferenciado. Pelo amor de eficiência, uma estrutura de árvore real não é usado. Em vez disso , a árvore é formado no local , bem no array. O algoritmo heapsort é um algoritmo " in place" , uma vez que não requer memória extra para realizar a classificação . Instruções
1
Componha o método swap. Isso vai trocar dois elementos de um array " de" swap public static void ( int [ ] a, int i , int j) {int tmp = a [j] ; . Uma [j] = a [i] ; um [i] = tmp ; } " "
2
Faça o núcleo do algoritmo , o método siftDown . É usado tanto para formar a estrutura de pilha e fazer o tipo real .
3
Peneire grandes valores para a raiz da árvore e valores pequenos para as folhas com o método siftDown . Enquanto este método é chamado várias vezes durante o processo de triagem , a maior nó é consistentemente peneirado para o nó de raiz e mudou-se para o fim da matriz . Qualquer nó n tem até dois filhos, cujos índices são n * 2 + 1 e n * 2 + 2. " " siftDown public static void (int [] a , int start , int end ) { raiz int = partida , enquanto (root * 2 + 1 criança int = root * 2 + 1 //Se a criança tem um irmão ea valor da criança é menor do que seu irmão se ( criança criança + +; } if (a [ root] swap ( a , raiz, criança ); root = criança ;} else { return;} }} " "
4
Use o método heapify . Este método é chamado no início do tipo para criar a estrutura de heap inicial. isso é feito de forma rápida, uma vez que a estrutura de heap é um pouco vago. a única exigência é que cada nó raiz deve ser maior que o . nós filhos " " heapify public static void (int [] a) {for (int start = a.length /2 - 1; iniciar > = 0; começar -) siftDown (a, começar , a.length -1 ); . . . } " "
5
Escreva o método heapsort o método heapifies primeiro a matriz para se preparar para o tipo o método siftDown é então chamado novamente desde o nó raiz é agora um valor pequeno Este Peneire um novo valor grande para o nó raiz , e todo o processo é repetido até que o tamanho da pilha é um " " heapsort public static void (int [] a) { heapify ( a); . for ( final int = a. comprimento - 1; final > 1; final -) { troca (a, final , 0); siftDown (a, 0, final - 1) ;}} " "
6
Teste . método heapsort o exemplo a seguir mostra um pequeno programa de teste " " void main ( string [ ] args ) { public static int [] a = new int [ 10]; . for (int i = 0; i for (int i = 0; i trocar (a, i, i + ( int) ( Math.random ( ) * ( 9 - i ))); System.out.println (" Antes de classificação :"); for (int i = 0; i heapsort ( a); System.out.println (" Após a triagem "); for (int i = 0; } i " "