堆排序

53 阅读1分钟
public class HeapSort {

    public static void main(String[] args) {
        int[] arr={2,3,1,4,7,5};
        new HeapSort().sort(arr);
    }

    public void sort(int[] arr){
        int n=arr.length;
        for(int i=n/2-1;i>=0;i--){
            heapify(arr,n,i);
        }
        for(int i=n-1;i>=0;i--){
            int tmp=arr[i];
            arr[i]=arr[0];
            arr[0]=tmp;
            heapify(arr,i,0);
        }
    }
    private void heapify(int[] arr,int n,int i){
        int max=i;
        int left=2*i+1;
        int right=2*i+2;
        if(left<n&&arr[left]>arr[max])
            max=left;
        if(right<n&&arr[right]>arr[max])
            max=right;
        if(max!=i){
            int tmp=arr[max];
            arr[max]=arr[i];
            arr[i]=tmp;
            heapify(arr,n,max);
        }
    }
}