// Ordenacion por monticulos - HeapSort public static void ordenacionMonticulos(int[] v) { final int N = v.length; for(int nodo = N/2; nodo>=0; nodo--) hacerMonticulo(v, nodo, N-1); for(int nodo = N-1; nodo>=0; nodo--) { int tmp = v[0]; v[0] = v[nodo]; v[nodo] = tmp; hacerMonticulo(v, 0, nodo-1); } } public static void hacerMonticulo(int[] v, int nodo, int fin) { int izq = 2*nodo+1; int der = izq+1; int may; if(izq>fin) return; if(der>fin) may=izq; else may= v[izq]>v[der]?izq:der; if(v[nodo] < v[may]) { int tmp = v[nodo]; v[nodo] = v[may]; v[may] = tmp; hacerMonticulo(v, may, fin); } }
La complejidad del algoritmo de ordenación por montículos es O(n log n) teniendo en cuenta que el proceso de organizar el montículo en el peor caso solamente tiene que hacer intercambios sobre una sola línea de elementos desde la raíz del ábol hasta alguna de las hojas para un máximo de log n intercambios.