package heapsort;
import java.util.ArrayList;
import java.util.List;
import java.util.Stack;
/**
*
* @author liuzhenzhao
*/
class MyHeapSort
{
private int heap_size;
public MyHeapSort(int i)
{
heap_size=i;
}
public int[] heapSort(int []A)
{
A=buildMaxHeap(A);
for(int i=1;i<A.length;i++)
{
System.out.print(A[i]+" ");
}
System.out.println("");
for(int i=A.length-1;i>=2;i--)
{
int temp=A[i];
A[i]=A[1];
A[1]=temp;
heap_size--;
A=maxHeapify(A,1);
System.out.println("-------------------");
for(int j=1;j<A.length;j++)
{
System.out.print(A[j]+" ");
}
}
return A;
}
public int[] buildMaxHeap(int []A)
{
heap_size=A.length-1;
for(int i=(A.length-1)/2;i>=1;i--)
{
A=maxHeapify(A,i);
}
return A;
}
public int[] maxHeapify(int []A,int i)
{
int l=left(i);
int r=right(i);
int largest=i;
if(l<=heap_size&&A[l]>A[i])
{
largest=l;
}
else
largest=i;
if(r<=heap_size&&A[r]>A[largest])
{
largest=r;
}
if(largest!=i)
{
int temp=A[i];
A[i]=A[largest];
A[largest]=temp;
A=maxHeapify(A,largest);
}
return A;
}
private int parent(int i)
{
return i/2;
}
private int left(int i)
{
return 2*i;
}
private int right(int i)
{
return 2*i+1;
}
}
public class Heapsort
{
/**
* @param args the command line arguments
* 测试部分
*/
public static void main(String []args)
{
MyHeapSort o=new MyHeapSort(10);
int []A={-1,1,3,14,2,4,8,9,7,16,10};
A=o.heapSort(A);
System.out.println("");
for(int i=1;i<A.length;i++)
{
System.out.print(A[i]+" ");
}
}
}