forked from larymak/Python-project-Scripts
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathHeap_sort.py
43 lines (31 loc) · 1 KB
/
Heap_sort.py
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
def Heapify(Array, n, i):
# Find largest among root and children
largest = i
l = 2 * i + 1
r = 2 * i + 2
if l < n and Array[l] > Array[largest]:
largest = l
if r < n and Array[r] > Array[largest]:
largest = r
# If root is not largest, swap with largest and continue heapifying
if largest != i:
Array[i], Array[largest] = Array[largest], Array[i]
Heapify(Array, n, largest)
def HeapSort(Array):
n = len(Array)
# Build a max heap
for i in range(n//2, -1, -1):
Heapify(Array, n, i)
# One by one extract elements
for i in range(n-1, 0, -1):
# Swap
Array[i], Array[0] = Array[0], Array[i]
# Heapify root element
Heapify(Array, i, 0)
if __name__ == "__main__":
Array = [-2, -3, -1, 11, 9, 12, 4, -5, -12, 6, 19, 20]
HeapSort(Array)
n = len(Array)
print("Sorted array is")
for i in range(n):
print("%d " % Array[i], end='')