Skip to content

Commit 942773d

Browse files
author
Jiang Haifeng
committed
添加 最大堆
1 parent 062daa3 commit 942773d

File tree

2 files changed

+73
-0
lines changed

2 files changed

+73
-0
lines changed

Heap/src/MaxHeap.java

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
public class MaxHeap<Key extends Comparable<Key>> {
2+
private Key[] data;
3+
private int capacity;
4+
private int count;
5+
6+
public int size() {
7+
return count;
8+
}
9+
10+
public boolean isEmpty() {
11+
return count == 0;
12+
}
13+
14+
public MaxHeap(int capacity) {
15+
data = (Key[]) new Comparable[capacity + 1];
16+
count = 0;
17+
this.capacity = capacity;
18+
}
19+
20+
private boolean less(int i, int j) {
21+
return data[i].compareTo(data[j]) < 0;
22+
}
23+
24+
private void exch(int i, int j) {
25+
Key tmp = data[i];
26+
data[i] = data[j];
27+
data[j] = tmp;
28+
}
29+
30+
public void swin(int k) {
31+
while (k > 1 && less(k / 2, k)) {
32+
exch(k / 2, k);
33+
k = k / 2;
34+
}
35+
}
36+
37+
public void sink(int k) {
38+
while (k * 2 <= count) {
39+
int j = k * 2;
40+
if (j < count && less(j, j + 1)) j++;
41+
if (!less(k, j)) break;
42+
exch(k, j);
43+
k = j;
44+
}
45+
}
46+
47+
public void insert(Key key) {
48+
data[++count] = key;
49+
swin(count);
50+
}
51+
52+
public Key delMax() {
53+
Key key = data[1];
54+
exch(1, count);
55+
data[count--] = null;
56+
sink(1);
57+
return key;
58+
}
59+
60+
public static void main(String[] args) {
61+
int[] nums = {2, 3, 4, 5, 6};
62+
MaxHeap<Integer> maxHeap = new MaxHeap<>(nums.length);
63+
for (int i = 0; i < nums.length; i++) {
64+
maxHeap.insert(nums[i]);
65+
}
66+
for (int i = 0; i < nums.length; i++) {
67+
System.out.println(maxHeap.delMax());
68+
}
69+
}
70+
71+
}

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@
99
- 【数组】
1010
- [静态数组](./Array/src/StaticArray.java)
1111
- [动态数组 ](./Array/src/Array.java) - 动态扩容
12+
- 【堆】
13+
- [最大堆](./Heap/src/MaxHeap.java)
1214
- 【栈】
1315
- [](./Array/src/Array.java) - 基于[【数组】- 动态数组](./Array/src/Array.java)
1416
- 【队列】

0 commit comments

Comments
 (0)