""" Heap sort algorithm implementation """


def heap_sort(data):
    """Sort a list (data) in-place using HeapSort.

    Args:
        data (list): lista to be sorted.
    """
    length = len(data)
    index = length // 2
    parent = 0
    child = 0
    temp = 0
    while True:
        if index > 0:
            index -= 1
            temp = data[index]
        else:
            length -= 1
            if length == 0:
                return
            temp = data[length]
            data[length] = data[0]

        parent = index
        child = index * 2 + 1

        while child < length:
            if (child + 1) < length and data[child + 1] > data[child]:
                child += 1
            if data[child] > temp:
                data[parent] = data[child]
                parent = child
                child = parent * 2 + 1
            else:
                break
        data[parent] = temp


if __name__ == "__main__":
    list_to_sort = [9, 1, 7, 6, 2, 8, 5, 3, 4, 0]
    print("Unsorted list: {}".format(list_to_sort))
    heap_sort(list_to_sort)
    print("Sorted list: {}".format(list_to_sort))