forked from tarunsinghofficial/HacktoberFest
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request tarunsinghofficial#748 from thesmitpatel/patch-1
Create heap_sort.py
- Loading branch information
Showing
1 changed file
with
43 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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) |