public class HeapSort{
public static void createHeap(int[] data, int n)
{
//n/2-1 为最后一个孩子节点的父节点
for(int i = (n/2 - 1); i >= 0; i--)
{
ajustHeap(data, i ,n);
}
}
public static void exchangeHeap(int[] data, int n)
{
//调整第一个和最后一个数,再调整堆
for(int i = n - 1; i >= 0; i--)
{
swap(data, 0, i);
//每次都是从0号根节点处向下调整
ajustHeap(data, 0, i);
}
}
//小顶堆
public static void ajustHeap(int[] data. int i, int n)
{
int j = 2 * i - 1; //左孩子
while(j < n)
{
if( j+1<n && data[j] > data[j+1])
j++;
if(data[i] < data[j]) //这里就表明了下面的data[i] > data[j]
break;
swap(data,i,j);
i = j;
j = 2 * i - 1;
}
}
}