heap queue code example

Example 1: python heapq

>>> import heapq
>>> heap = []
>>> heapq.heappush(heap, (5, 'write code'))
>>> heapq.heappush(heap, (7, 'release product'))
>>> heapq.heappush(heap, (1, 'write spec'))
>>> heapq.heappush(heap, (3, 'create tests'))
>>> heapq.heappop(heap)#pops smallest
(1, 'write spec')
>>> heapq.nlargest(2,heap)#displays n largest values without popping
[(7, 'release product'),(5, 'write code')]
>>> heapq.nsmallest(2,heap)#displays n smallest values without popping
[(3, 'create tests'),(5, 'write code')]
>>> heap = [1, 3, 5, 7, 9, 2, 4, 6, 8, 0]
>>> heapq.heapify(heap)#converts a list to heap
>>> heap
[0, 1, 2, 6, 3, 5, 4, 7, 8, 9]
>>> def heapsort(iterable):
...     h = []
...     for value in iterable:
...         heappush(h, value)
...     return [heappop(h) for i in range(len(h))]
...
>>> heapsort([1, 3, 5, 7, 9, 2, 4, 6, 8, 0])
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

Example 2: heap sort

// @see https://www.youtube.com/watch?v=H5kAcmGOn4Q

function heapify(list, size, index) {
    let largest = index;
    let left = index * 2 + 1;
    let right = left + 1;
    if (left < size && list[left] > list[largest]) {
        largest = left;
    }
    if (right < size && list[right] > list[largest]) {
        largest = right;
    }
    if (largest !== index) {
        [list[index], list[largest]] = [list[largest], list[index]];
        heapify(list, size, largest);
    }
    return list;
}

function heapsort(list) {
    const size = list.length;
    let index = ~~(size / 2 - 1);
    let last = size - 1;
    while (index >= 0) {
        heapify(list, size, --index);
    }
    while (last >= 0) {
        [list[0], list[last]] = [list[last], list[0]];
        heapify(list, --last, 0);
    }
    return list;
}

heapsort([4, 7, 2, 6, 4, 1, 8, 3]);