diff --git a/sorts/heap_sort.py b/sorts/heap_sort.py new file mode 100644 index 000000000..5d1cbbbd0 --- /dev/null +++ b/sorts/heap_sort.py @@ -0,0 +1,39 @@ + +from __future__ import print_function + + +def heapify(unsorted,index,heap_size): + largest = index + left_index = 2*index + 1 + right_index = 2*index + 2 + if left_index < heap_size and unsorted[left_index] > unsorted[largest]: + largest = left_index + + if right_index < heap_size and unsorted[right_index] > unsorted[largest]: + largest = right_index + + if largest != index: + unsorted[largest],unsorted[index] = unsorted[index],unsorted[largest] + heapify(unsorted,largest,heap_size) + +def heap_sort(unsorted): + n=len(unsorted) + for i in range (n/2 - 1 , -1, -1) : + heapify(unsorted,i,n) + for i in range(n - 1, -1, -1): + unsorted[0], unsorted[i] = unsorted[i], unsorted[0] + heapify(unsorted,0,i) + return unsorted + + +if __name__ == '__main__': + import sys + if sys.version_info.major < 3: + input_function = raw_input + else: + input_function = input + + user_input = input_function('Enter numbers separated by coma:\n') + unsorted = [int(item) for item in user_input.split(',')] + print (heap_sort(unsorted)) +