1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83
| public class BinaryHeap {
public static int[] upAdjust(int arr[], int length){ int child = length - 1; int parent = (child - 1)/2; int temp = arr[child];
while (child > 0 && temp < arr[parent]) { arr[child] = arr[parent]; child = parent; parent = (child - 1) / 2; } arr[child] = temp; return arr; }
public static int[] downAdjust(int[] arr, int parent, int length) { int temp = arr[parent]; int child = 2 * parent + 1; while (child < length) { if (child + 1 < length && arr[child] > arr[child + 1]) { child++; } if (temp <= arr[child]) break; arr[parent] = arr[child]; parent = child; child = 2 * parent + 1; } arr[parent] = temp; return arr; }
public static int[] buildHead(int[] arr,int length) { for (int i = (length - 2) / 2; i >= 0; i--) { arr = downAdjust(arr, i, length); } return arr; } }
|