經典排序之堆排序java代碼


public class HSort {
    //構建最小堆
    public static void adjustHeap(int []arr,int i,int length) {
        int temp=arr[i];
        for(int k=2*i+1;k<length;k=k*2+1) {
            if(k+1<length&&arr[k]<arr[k+1]) {
                k++;
            }
            if(arr[k]>temp) {
                arr[i]=arr[k];
                i=k;
            }else {
                break;    
            }
        }
        arr[i]=temp;
    }
    
    public static void swap(int []arr,int a,int b) {
        int temp=arr[a];
        arr[a]=arr[b];
        arr[b]=temp;
    }
    
    public static void hSort(int []arr) {
        int i;
        //從第一個非葉子節點開始調整堆結構
        for(i=arr.length/2-1;i>=0;i--){
                adjustHeap(arr,i,arr.length);
        }
        //交換根元素和第一個元素
        for(i=arr.length-1;i>0;i--) {
            swap(arr, 0, i);
            adjustHeap(arr, 0, i);
        }
    }
    
    public static void main(String[] args) {
        int arr[]= {5,4,9,8,7,6,0,1,3,2};
        hSort(arr);
        for(int a:arr) {
            System.out.print(a);
        }
    }
    
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM