堆排序

来源:互联网 发布:拼图游戏源码 编辑:程序博客网 时间:2024/06/04 19:49
public class MaxHeap {
//调整堆,使根节点保持大堆的性质
  public void maxHeap(int[]A,int i,int heapsize){


 int l=2*i;//左孩子下标
 int r=2*i+1;//右孩子
 int largest=-1;
 if(l<heapsize&&A[l]>A[i])
 largest=l;
 else {
largest = i;
}
 if(r<heapsize&&A[r]>A[largest])
 largest=r;
 if (largest!=i) {
 int temp=A[i];
 A[i]=A[largest];
 A[largest]=temp;
 maxHeap(A, largest,heapsize);
 
}
 
 return ;
  }
  //建堆
  public int[] buildHeap(int []A)
  {
 int n=A.length;
 for(int i=n/2;i>=0;i--)
 {
 maxHeap(A, i,n);
 
 }
 return A;

  }
  //堆排序
  public void heapSort(int[] A)
  {
 buildHeap(A);
 int n=A.length;
 int heapsize=n;
 for(int i=n-1;i>=1;i--)
 {
 int temp1=A[0];//交换头尾,将最大元素保存在尾部
 A[0]=A[i];
 A[i]=temp1;
 heapsize--;//尾定位前移
 maxHeap(A, 0, heapsize);
 
 }  
  }


  public static void main(String[] args) {
int []A={1,2,3,4,5,6,7};
MaxHeap mh=new MaxHeap();
mh.heapSort(A);
for(int i:A)
System.out.print(i+"  ");

}
}
0 0
原创粉丝点击