-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathheap.pinn
70 lines (62 loc) · 1.07 KB
/
heap.pinn
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
//heap sort
func left(i int) int {
return 2 * i;
}
func right(i int) int {
return 2 * i + 1;
}
//heap := [-1, 16, 4, 10, 14, 7, 9, 3, 2, 8, 1];
var heap [4]int;
heap[0] = 0 -1;
heap[1] = 4;
heap[2] = 7;
heap[3] = 2;
heap[4] = 1;
var hsize int;
hsize = 4;
func build_max() {
for x = hsize / 2; x >= 1; x = x - 1 {
max_heap(x);
}
}
func max_heap(i int) {
l = left(i);
r = right(i);
largest = i;
if l <= hsize {
if heap[l] > heap[i] {
largest = l;
}
}
if r <= hsize {
if heap[r] > heap[largest] {
largest = r;
}
}
if largest != i {
temp = heap[i];
heap[i] = heap[largest];
heap[largest] = temp;
max_heap(largest);
}
}
func heapsort() {
for z = hsize; z >= 2; z = z - 1 {
temp = heap[1];
heap[1] = heap[z];
heap[z] = temp;
hsize = hsize - 1;
max_heap(1);
}
}
build_max();
print(heap[1]);
print(heap[2]);
print(heap[3]);
heapsort();
print(3);
print(7);
print(heap[1]);
print(heap[2]);
print(heap[3]);
print(heap[4]);