算法學習之堆排序(java實現)

public class HeapSort {
 static int heapsize=0;
 public static void main(String[] args) {
  // TODO Auto-generated method stub
  int[] array={-1,27,17,3,16,13,10,1,5,7,12,4,8,9,0,100};
  heapsize=array.length;
  print(array);
  biuldMaxHeap(array);
  print(array);
  heapSort(array);
  print(array);
 }
 public static void heapSort(int[] a){
  biuldMaxHeap(a);
  int temp;
  for(int i=a.length-1;i>1;i--){
   temp=a[1];
   a[1]=a[i];
   a[i]=temp;
   heapsize--;
   maxHeapify(a, 1);
  }
 }
 public static void biuldMaxHeap(int[] a){
  heapsize=a.length;
  for(int i=a.length/2;i>0;i--)
   maxHeapify(a, i);
 }
 public static void maxHeapify(int[] a, int i){
  int l=left(i);
  int r=right(i);
  int largest=0;
  int temp;
  if(l<heapsize&&a[l]>a[i])
   largest=l;
  else
   largest=i;
  if(r<heapsize&&a[r]>a[largest])
   largest=r;
  if(largest!=i){
   temp=a[i];
   a[i]=a[largest];
   a[largest]=temp;
   maxHeapify(a, largest);
  }
 }
 public static void print(int[] a){
  for(int i=0;i<a.length;i++)
   System.out.print(a[i]+" ");
  System.out.println();
 }
 public static int left(int i){
  return i*2;
 }
 public static int right(int i){
  return i*2+1;
 }
 public static int parent(int i){
  return i/2;
 }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章