堆排序

public class Heap_paixu {

    public static void main(String[] args) {
        int[] str= {55,66,95,45,20,15,3,87,16};
        /*int[] str= {55,95,21,103,78,66};*/
        /*printArray(str);*/
        heapsort(str);
        for (int i : str) {
            System.out.println(i);
        }
        
    }

    /*public static void printArray(int[] array) {  
        System.out.print("{");  
        for (int i = 0; i < array.length; i++) {  
            System.out.print(array[i]);  
            if (i < array.length - 1) {  
                System.out.print(", ");  
            }  
        }  
        System.out.println("}"); }*/
    
    public static void exchange(int[] a,int index1,int index2) {
        int temp=a[index1];
        a[index1]=a[index2];
        a[index2]=temp;
    }
    
    private static void heapsort(int[] a) {
        if (a == null || a.length <= 1) {  
            return;  
        } 
        
        for( int s=a.length/2;s>=0;s--) { //s是从n/2的节点开始减一减一地比 大的堆 的值
           buildsmallheap( a, s, a.length-1);
        }
        
        for( int  s=a.length-1;s>=1;s--) {
            exchange(a, 0, s);
            buildsmallheap(a, 0, s-1);
        }
        
    }

    

    private static void buildsmallheap(int[] a,int start,int length) {//start是小堆的开始节点,逐1往下寻找
        int i=2*start+1;
        int temp=a[start];
        for(;i<=length;i=i*2+1) {
            if((i+1)<=length&&a[i]=a[i]) {
                break;
            }
            a[start]=a[i];
            start=i;
        }
        a[start]=temp;
        
        
    }

}

你可能感兴趣的:(堆排序)