2023-10-03 01:15:51 +05:30
|
|
|
def heapify(arr, n, i):
|
|
|
|
largest = i
|
|
|
|
left = 2 * i + 1
|
|
|
|
right = 2 * i + 2
|
2016-08-14 10:04:21 +00:00
|
|
|
|
2023-10-03 01:15:51 +05:30
|
|
|
if left < n and arr[left] > arr[largest]:
|
|
|
|
largest = left
|
2016-08-16 12:43:02 -04:00
|
|
|
|
2023-10-03 01:15:51 +05:30
|
|
|
if right < n and arr[right] > arr[largest]:
|
|
|
|
largest = right
|
2019-10-05 01:14:13 -04:00
|
|
|
|
2023-10-03 01:15:51 +05:30
|
|
|
if largest != i:
|
|
|
|
arr[i], arr[largest] = arr[largest], arr[i]
|
|
|
|
heapify(arr, n, largest)
|
2016-08-17 17:18:11 +05:30
|
|
|
|
|
|
|
|
2023-10-03 01:15:51 +05:30
|
|
|
def heap_sort(arr):
|
2019-10-05 01:14:13 -04:00
|
|
|
"""
|
2023-10-03 01:15:51 +05:30
|
|
|
Sorts a list using the heap sort algorithm.
|
|
|
|
:param arr: List of comparable items.
|
|
|
|
:return: Sorted list.
|
2019-10-05 01:14:13 -04:00
|
|
|
"""
|
2023-10-03 01:15:51 +05:30
|
|
|
n = len(arr)
|
|
|
|
|
|
|
|
# Build a max heap.
|
2016-09-26 02:45:14 +05:30
|
|
|
for i in range(n // 2 - 1, -1, -1):
|
2023-10-03 01:15:51 +05:30
|
|
|
heapify(arr, n, i)
|
|
|
|
|
|
|
|
# Extract elements one by one.
|
2016-09-02 13:59:46 +03:00
|
|
|
for i in range(n - 1, 0, -1):
|
2023-10-03 01:15:51 +05:30
|
|
|
arr[0], arr[i] = arr[i], arr[0]
|
|
|
|
heapify(arr, i, 0)
|
|
|
|
|
|
|
|
return arr
|
2016-08-14 09:51:52 +00:00
|
|
|
|
2019-10-05 01:14:13 -04:00
|
|
|
|
|
|
|
if __name__ == "__main__":
|
|
|
|
user_input = input("Enter numbers separated by a comma:\n").strip()
|
|
|
|
unsorted = [int(item) for item in user_input.split(",")]
|
2023-10-03 01:15:51 +05:30
|
|
|
sorted_arr = heap_sort(unsorted)
|
|
|
|
print(sorted_arr)
|