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)。 } } }