package com.xxzzycq.sort;
public class Heapsort
{
public int[] data;
private void swap(int[] exchange, int i, int j)
{
int temp = exchange[i];
exchange[i] = exchange[j];
exchange[j] = temp;
}
private void ajustHeap(int[] array, int lastIndex)
{
int lastParentIndex = (lastIndex-1)/2;
for(int i = lastParentIndex; i >= 0; i--)
{
int parentIndex = i;
int leftChild = 2*i + 1;
int rightChild = leftChild;
if(lastIndex >= 2*i + 2)
{
rightChild = 2*i + 2;
}
int maxIndex = (array[leftChild] < array[rightChild])?rightChild:leftChild;
if(array[parentIndex] < array[maxIndex])
{
swap(array, parentIndex, maxIndex);
}
}
}
public void initHeap()
{
int i;
for(i = data.length - 1; i > 0; i--)
{
ajustHeap(data, i);//建堆
swap(data, i, 0);//交换第一个(0)和最后一个(i)的值
}
}
public void display()
{
for(int i = 0; i < data.length; i++)
{
System.out.print(data[i]);
System.out.print(" ");
}
}
public static void main(String[] args)
{
Heapsort heap = new Heapsort();
int[] data = new int[]{45, 65, 30 , 85, 69, 78,5, 69, 987, 42, 15, 1, 2};
heap.data = data;
heap.initHeap();
heap.display();
}
}