算法之排序:堆排序

public static void swap(int[] arr,int i,int j){
   int temp=arr[i];
   arr[i]=arr[j];
   arr[j]=temp;
}
public static void heapInsert(int[] arr,int curr){
   while(arr[curr]>arr[(curr-1)/2]){
      swap(arr,curr,(curr-1)/2);
      curr=(curr-1)/2;
   }
}
public static void heapify(int[] arr,int index,int size){
   while(index*2+1<=size){
      int left=index*2+1;
      int right=left+1;
      int largest=right<=size && arr[right]>arr[left] ? right:left;
      largest=arr[largest]>arr[index] ? largest : index;
      if(arr[largest]<=arr[index]){
         return;
      }
      swap(arr,largest,index);
      index=largest;
   }
}
public static void heapSort(int[] arr){
   if (arr == null || arr.length < 2) {
      return;
   }
   for(int i=0;i<arr.length-1;i++){
      heapInsert(arr,i);
   }
   int size=arr.length-1;
   while(size>0){
      swap(arr,0,size--);
      heapify(arr,0,size);
   }
}

  

posted @ 2018-12-09 22:14  君奉天  阅读(132)  评论(0编辑  收藏  举报