import java.util.*;
public final class Test {
public static void printf(int []a)
{
for(int i=0;i<a.length;i++)
{
System.out.print(a[i]+" ");
}
System.out.print("\n");
}
public static void HeapAdjust(int []a,int s,int m)//调整堆
{
int rc=a[s];
for(int j=2*s+1;j<m;j=j*2+1)//从i的左孩子开始
{
if(j+1<m&&a[j]<a[j+1])//如果左孩子小于右孩子,j指向右孩子
{
j++;
}
if(rc<a[j])//子节点大于父亲节点
{
a[s]=a[j];//将子节点上移到父亲节点
s=j;//转换当前节点为j
}
else
{
break;
}
}
a[s]=rc;
}
public static void sort(int[]a)
{
for(int i=a.length/2-1;i>=0;i--)
{
HeapAdjust(a,i,a.length);
}
for(int i=a.length-1;i>0;i--)
{
swap(a,0,i);
HeapAdjust(a,0,i);
printf(a);
}
}
public static void swap(int []a,int l,int h)
{
int tem=a[l];
a[l]=a[h];
a[h]=tem;
}
public static void main(String[]args)
{
int[]test={1,2,6,8,4,5,7,9,3,10,22,17,19,21,20,14,11,13,15,16,18,12};
sort(test);
}
}
参考https://www.cnblogs.com/chengxiao/p/6129630.html