Skip to content

Commit

Permalink
Merge pull request tarunsinghofficial#748 from thesmitpatel/patch-1
Browse files Browse the repository at this point in the history
Create heap_sort.py
  • Loading branch information
tarunsinghofficial committed Oct 22, 2020
2 parents bf017f5 + dd583ee commit ab5ded2
Showing 1 changed file with 43 additions and 0 deletions.
43 changes: 43 additions & 0 deletions python-programming-2/heap_sort.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
def heapify(nums, heap_size, root_index):
# Assume the index of the largest element is the root index
largest = root_index
left_child = (2 * root_index) + 1
right_child = (2 * root_index) + 2

# If the left child of the root is a valid index, and the element is greater
# than the current largest element, then update the largest element
if left_child < heap_size and nums[left_child] > nums[largest]:
largest = left_child

# Do the same for the right child of the root
if right_child < heap_size and nums[right_child] > nums[largest]:
largest = right_child

# If the largest element is no longer the root element, swap them
if largest != root_index:
nums[root_index], nums[largest] = nums[largest], nums[root_index]
# Heapify the new root element to ensure it's the largest
heapify(nums, heap_size, largest)


def heap_sort(nums):
n = len(nums)

# Create a Max Heap from the list
# The 2nd argument of range means we stop at the element before -1 i.e.
# the first element of the list.
# The 3rd argument of range means we iterate backwards, reducing the count
# of i by 1
for i in range(n, -1, -1):
heapify(nums, n, i)

# Move the root of the max heap to the end of
for i in range(n - 1, 0, -1):
nums[i], nums[0] = nums[0], nums[i]
heapify(nums, i, 0)


# Verify it works
random_list_of_nums = [35, 12, 43, 8, 51]
heap_sort(random_list_of_nums)
print(random_list_of_nums)

0 comments on commit ab5ded2

Please sign in to comment.