ソートアルゴリズム-heapranking

heapranking原理

heapranking、Javaコード

パブリック クラスheapranking {
     公共 静的 ボイドメイン(文字列[]引数){ 
        スキャナ = 新しい新しいスキャナ(System.in);         
        のSystem.out.println( "アレイのサイズを入力してください" );        
         int型 N = in.nextInt()。// キーボードからの配列のサイズをお読みください。        
        ダブル A [] = 新しい新しい ダブル[N];         
        のSystem.out.println( "アレイの番号を入力してください" );        
         のためのINT I = 0; I ++は、IはN <){ // キーボードから読み出し入力番号。            
            [I] = in.nextDouble(); 
        }
        // サンプル入力 
        するSystem.out.println( "入力" + Arrays.toString(A))。
        heapranking maxhp = 新しいheapranking(); 
        maxhp.heapsort(A)。
        System.out.println( "出力:" + Arrays.toString(A))。
    } 
    保護された 二重A []。
    保護された int型のヒープサイズ。
    保護された int型の親(int型のI){ リターン(I - 1)/ 2 ;}
     保護 INT(左int型のI){ リターン 2 * I + 1 ;}
     保護 INT右(INT I){ リターン 2 * I + 2 ;} 

    // コンストラクタ
    パブリックheapranking(){}
     公共 heapranking(ダブルA []){ 
        buildMaxHeap(A)。
    }     

    保護された ボイド maxHeapify(int型I){
         int型、L = 左(i)を、
        INTの R = 右(I)。
        int型 =最大の私は、
        もし - (L <1 && A [L] =ヒープサイズ> A [i])と
            最大 =の; L
        もし(R <=ヒープサイズ- 1 && A [R]> A [最大])
            最大 = R。
        もし(最大=!I){
             ダブル TEMP = A [i]は、
            // スワップ 
            A [I] = A [最大]。
            [最大] = TEMP。
            この.maxHeapify(最大)。
        } 
    } 
    
    公共 ボイド buildMaxHeap(ダブル[] A){
         この .A = A。
        この .heapsize = A.length。
        
        以下のためのint型I =親(HEAPSIZE - 1)。I> = 0; i-- 
            maxHeapify(I);        
    } 
    
    公共 ボイドヒープソート(ダブル[] A){ 
        buildMaxHeap(A)。
        
//         int型のステップ= 1; 
        以下のためにint型 I = A.length - 1、I> 0; i-- ){
             ダブル TEMP = A [i]は、
            [I] = A [0 ]。
            [ 0] = TEMPと、
            ヒープサイズ - ;
//             のSystem.out.println( "ステップ:" +(ステップ++)+ Arrays.toString(A))。
            maxHeapify(0)。
        }         
    } 
}

 

おすすめ

転載: www.cnblogs.com/jocelynD-9/p/11262636.html