Exemple #1
0
def heapsort(arr):
    """
    :description: heapsort, version not in place b/c the heap ops don't take heap size parameter. Works by removing largest element and calling max_heapify

    :time: O(nlgn) worst case calls max_heapify n times

    :space: O(n)
    """
    heap = arr
    heap_ops.build_max_heap(heap)
    sorted_arr = []
    for i in range(len(arr) - 1):
        heap[0], heap[-1] = heap[-1], heap[0]
        sorted_arr.append(heap.pop())
        heap_ops.max_heapify(heap, 0)
    sorted_arr.append(heap.pop())
    return list(reversed(sorted_arr))
Exemple #2
0
def heapsort(arr):
    """
    :description: heapsort, version not in place b/c the heap ops don't take heap size parameter. Works by removing largest element and calling max_heapify

    :time: O(nlgn) worst case calls max_heapify n times

    :space: O(n)
    """
    heap = arr
    heap_ops.build_max_heap(heap)
    sorted_arr = []
    for i in range(len(arr) - 1):
        heap[0], heap[-1] = heap[-1], heap[0]
        sorted_arr.append(heap.pop())
        heap_ops.max_heapify(heap, 0)
    sorted_arr.append(heap.pop())
    return list(reversed(sorted_arr))
Exemple #3
0
    """
    heap_increase_key(heap, i, heap_max(heap) + 1)
    heap_extract_max(heap)

def max_heap_insert(heap, value):
    """
    :description: insert an element into the heap 

    :time: O(lgn)
    """
    heap.append(-sys.maxint)
    heap_increase_key(heap, len(heap) - 1, value)

if __name__ =='__main__':
    data = [1,2,3,4,5,6,7,8,9,10,1,2,3,4,5,6,5,4,3,2,1,2,3,4,5]
    heap_ops.build_max_heap(data)
    result = heap_max(data) == max(data)
    print 'correct?: {}'.format(result)

    data = [1,2,3]
    heap_ops.build_max_heap(data)
    max_value = heap_extract_max(data)
    result = max_value == 3
    print 'correct?: {}'.format(result)
    result = data == [2,1]
    print 'correct?: {}'.format(result)

    data = [1,2,3]
    heap_ops.build_max_heap(data)
    heap_increase_key(data, 2, 10)
    result = data == [10, 2, 3] or data == [10, 3, 2]
Exemple #4
0
def max_heap_insert(heap, value):
    """
    :description: insert an element into the heap 

    :time: O(lgn)
    """
    heap.append(-sys.maxint)
    heap_increase_key(heap, len(heap) - 1, value)


if __name__ == '__main__':
    data = [
        1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1, 2, 3, 4, 5, 6, 5, 4, 3, 2, 1, 2, 3,
        4, 5
    ]
    heap_ops.build_max_heap(data)
    result = heap_max(data) == max(data)
    print 'correct?: {}'.format(result)

    data = [1, 2, 3]
    heap_ops.build_max_heap(data)
    max_value = heap_extract_max(data)
    result = max_value == 3
    print 'correct?: {}'.format(result)
    result = data == [2, 1]
    print 'correct?: {}'.format(result)

    data = [1, 2, 3]
    heap_ops.build_max_heap(data)
    heap_increase_key(data, 2, 10)
    result = data == [10, 2, 3] or data == [10, 3, 2]