提交 cf89f609 编写于 作者: GreyZeng's avatar GreyZeng

heapify

上级 dd33837e
......@@ -6,33 +6,23 @@ package git.snippet.heap;
// https://www.lintcode.com/problem/130/
public class LintCode_0130_Heapify {
public void heapify(int[] a) {
if (null == a || a.length <= 1) {
return;
}
for (int i = a.length - 1; i >= 0; i--) {
heapify(a, i, a.length);
}
}
public void heapify(int[] arr, int i, int len) {
int leftChildIndex = 2 * i + 1;
while (leftChildIndex < len) {
int min =
leftChildIndex + 1 < len && arr[leftChildIndex + 1] < arr[leftChildIndex]
? leftChildIndex + 1
: leftChildIndex;
min = arr[min] > arr[i] ? i : min;
if (min == i) {
break;
for (int index = a.length - 1; index >= 0; index--) {
int i = index;
int leftChildIndex = 2 * i + 1;
while (leftChildIndex < a.length) {
int minIndex = leftChildIndex + 1 < a.length && a[leftChildIndex] > a[leftChildIndex + 1] ? leftChildIndex + 1 : leftChildIndex;
minIndex = a[i] < a[minIndex] ? i : minIndex;
if (minIndex == i) {
break;
}
swap(a, i, minIndex);
i = minIndex;
leftChildIndex = 2 * i + 1;
}
swap(arr, min, i);
i = min;
leftChildIndex = 2 * min + 1;
}
}
public void swap(int[] arr, int i, int j) {
if (i != j) {
if (i != j && arr != null && arr.length > 1) {
arr[i] = arr[i] ^ arr[j];
arr[j] = arr[i] ^ arr[j];
arr[i] = arr[i] ^ arr[j];
......
......@@ -22,12 +22,10 @@ package git.snippet.heap;
// heapify和heapInsert都是logN级别的复杂度,因为N个节点的二叉树高度是logN
public class MaxHeap {
private final int[] heap;
// private final int limit; limit == heap.length
private int heapSize;
public MaxHeap(int limit) {
heap = new int[limit];
// this.limit = limit;
heapSize = 0;
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册