package methods;
public class HeapSort {
public static void moveBigger2Top(int[] x,int i,int scope)
{
int father=i;
while(father <= scope)
{
int leftSon=father*2+1;
int rightSon=father*2+2;
int targetSon=leftSon;
if(leftSon > scope)
return;
if(rightSon <= scope && x[rightSon] >x[leftSon])
targetSon=rightSon;
if(x[targetSon] > x[father])
{
int tmp=x[targetSon];
x[targetSon] = x[father];
x[father] = tmp;
}
father=targetSon;
}
}
public static void sort(int[] x)
{
int lastNonLeaf=x.length/2-1;
for(int i=lastNonLeaf; i>=0; i--)
{
moveBigger2Top(x,i,x.length-1);
}
for(int i=x.length-1 ;i>0; i--)
{
int tmp=x[0];
x[0]=x[i];
x[i]=tmp;
moveBigger2Top(x,0,i-1);
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] x=new int[11];
for(int i=0;i<11;i++)
{
x[i]=(int)(Math.random()*100.0);
}
System.out.println("排序前:");
for(int i=0;i<11;i++)
System.out.print(x[i]+" ");
HeapSort.sort(x);
System.out.println("\r\n排序后:");
for(int i=0;i<11;i++)
System.out.print(x[i]+" ");
}
}
练习——堆排序
最新推荐文章于 2018-12-05 00:24:56 发布