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 84 85 86 87
| package ds;
import java.util.Arrays;
public class minHeap<T extends Comparable<T>> { private T[] elements; private int size;
public minHeap(T[] arr, int size) { size = arr.length; elements = Arrays.copyOf(arr, Math.max(arr.length, size)); for (int i = arr.length / 2 - 1; i >= 0; i--) { downMove(elements, i, elements.length - 1); } }
private void downMove(T[] elements, int start, int end) { int parent = start; for (int i = start * 2 + 1; i <= end; i = i * 2 + 1) { if (i < end && elements[i].compareTo(elements[i + 1]) < 0) { i++; } if (elements[i].compareTo(elements[parent]) > 0) { T tmp = elements[parent]; elements[parent] = elements[i]; elements[i] = tmp; parent = i; } else { break; } } }
private void upMove(T[] elements, int start) { int child = start; for (int i = (start - 1) / 2; i > 0; i = (i - 1) / 2) { if (elements[child].compareTo(elements[i]) > 0) { T tmp = elements[child]; elements[child] = elements[i]; elements[i] = tmp; child = i; } } }
public void add(T element) { elements[size] = element; upMove(elements, size); size++; }
public void remove() { elements[0] = elements[size - 1]; size--; downMove(elements, 0, size); }
public T[] heapSort() { sortArrayFromHeap(elements); return elements; }
private void sortArrayFromHeap(T[] elements) { for (int i = elements.length - 1; i > 0; i--) { T tmp = elements[0]; elements[0] = elements[i]; elements[i] = tmp; downMove(elements, 0, i - 1); } }
public static void main(String[] args) { int[] arr = { -4, 0, 7, 4, 9, -5, -1, 0, -7, -1 }; Integer[] arrInteger = Arrays.stream(arr).boxed().toArray(Integer[]::new); minHeap<Integer> m = new minHeap<>(arrInteger, arrInteger.length + 10); m.add(10); int[] res = Arrays.stream(m.elements).mapToInt(Integer::intValue).toArray(); System.out.println(Arrays.toString(res)); } }
|