最近在看算法导论,把上面的算法翻译成java版本的。
public class Main
{
static int[] array = new int[]{3,1,6,8,4,2};
static int heap_size;
public static void MAX_HEAPIFY(int[] A,int i)
{
int l = 2*i + 1;
int r = 2*i + 2;
int largest = i;
if(l<heap_size && A[l]>A[largest])
{
largest = l;
}
if(r<heap_size && A[r]>A[largest])
{
largest = r;
}
if(i!=largest)
{
int tmp = A[i];
A[i] = A[largest];
A[largest] = tmp;
MAX_HEAPIFY(A, largest);
}
}
public static void BUILD_MAX_HEAP(int[] A)
{
heap_size = A.length;
for(int i = A.length/2-1;i>=0;i--)
{
MAX_HEAPIFY(A, i);
}
}
public static void HEAP_SORT(int[] A)
{
BUILD_MAX_HEAP(A);
for(int i=A.length-1;i>=1;i--)
{
int tmp = A[0];
A[0] = A[i];
A[i] = tmp;
heap_size--;
MAX_HEAPIFY(A, 0);
}
}
public static void main(String[] args) {
HEAP_SORT(array);
for (int i : array) {
System.out.print(i+" ");
}
}
}