HeapSort

6.1 Heaps

The (binary) heap data structure is an array object. An array A that represents a heap is an object with two attributes: A.length, which (as usual) gives the number of elements in the array, and A.heap-size, which represents how many elements in the heap are stored within array A. That is, although A[1..A.length] may contain numbers, only the elements in A[1..A.heap-size], where 0 $\leqslant$ A.heap-size $\leqslant$ A.length, are valid elements of the heap. The root of the tree is A[1], and given the index i of a node, we can easily compute the indices of its parent, left child, and right child: 
 PARENT(i)
 return [i/2]
LEFT(i)
 return 2i
RIGHT(i)
 return 2i + 1

6.2 Maintaining the heap property

MAX-HEAPIFY(A, i)
 l = LEFT(i)
 r = RIGHT (i)
 if l <= A.heap-size and A[l] > A[i]
     largest = l
 else
     largest = i
 if r <= A.heap-size and A[r] > A[largest]
     largest = r
 if largest != i
     exchange A[i] with A[largest]
     MAX-HEAPIFY(A, largest)

6.3 Building a heap

We can use the procedure MAX-HEAPIFY in a bottom-up manner to convert an array A[1..n], where n = A.length, into a max-heap.
BUILD-MAX-HEAP(A)
 A.heap-size = A.length
 for i = A.length/2 downto 1
     MAX-HEAPIFY(A, i)

6.4 The heapsort algorithm

HEAPSORT(A)
 BUILD-MAX-HEAP(A)
 for i = A.length downto 2
     exchange A[1] with A[i]
     A.heap-size = A.heap-size - 1
     MAX-HEAPIFY(A, 1)

6.5 Priority queues

HEAP-MAXIMUM(A)
 return A[1]
HEAP-EXTRACT-MAX(A)
 if A.heap-size < 1
     error "heap underflow"
 max = A[1]
 A[1] = A[A.heap-size]
 A.heap-size = A.heap-size -1
 MAX-HEAPIFY(A, 1)
 return max
MAX-INCREASE-INSERT(A, key)
 if key < A[i]
     error "new key is smaller than current key"
 A[i] = key
 while i > 1 and A[PARENT(i)] < A[i]
     exchange A[i] with A[PARENT(i)]
     i = PARENT(i)
MAX-HEAP-INSERT(A, key)
 A.heap-size = A.heap-size + 1
 A[A.heap-size] = negative_infinity
 HEAP-INCREASE-KEY(A, A.heap-size, key)

Comments

Popular posts from this blog

BdsDex: failed to load Boot0001 "UEFI BHYVE SATA DISK BHYVE-OABE-20A5-E582" from PciRoot(0x0)/Pci (0x2, 0x0)/Stat(0x0,0xFFFF,0x0) : Not Found

How To Install Nginx, MySQL and PHP (FEMP) Stack on FreeBSD 13.0

Install samba on FreeBSD(on VMware Workstation) to share files with Window.