diff --git a/sorts/heap_sort.py b/sorts/heap_sort.py index ec262ad6bae4..822bb6631250 100644 --- a/sorts/heap_sort.py +++ b/sorts/heap_sort.py @@ -1,4 +1,4 @@ -""" +''' This is a pure python implementation of the heap sort algorithm. For doctests run following command: @@ -8,26 +8,27 @@ For manual testing run: python insertion_sort.py -""" -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): - """Pure implementation of the heap sort algorithm in Python +''' + +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): + ''' + Pure implementation of the heap sort algorithm in Python :param collection: some mutable ordered collection with heterogeneous comparable items inside :return: the same collection ordered by ascending @@ -41,16 +42,15 @@ def heap_sort(unsorted): >>> heap_sort([-2, -5, -45]) [-45, -5, -2] - """ - 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) + ''' + 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: @@ -60,4 +60,4 @@ def heap_sort(unsorted): user_input = input_function('Enter numbers separated by a comma:\n') unsorted = [int(item) for item in user_input.split(',')] - print (heap_sort(unsorted)) + print(heap_sort(unsorted))