以下算法均对于数组 A
插入排序
按从小到大排序
for i = 1 to A.length
key = A[i]
j = i - 1
while (j > 0 and A[j] > key)
A[j+1] = A[j]
j = j - 1
A[j+1] = key
对于以1为开始的下标的数组,在二叉树的排列下,节点
PARENT(i) = i / 2
LEFT(i) = 2 * i
RIGHT(i) = 2 * i + 1
首先对于一个节点 i ,将以其为根节点的子树调整为最大堆的过程
MAX_HEAPIFY(A, i)
largest = i
l = LEFT(i)
r = RIGHT(i)
if l <= A.heap_size and A[l] > A[i]
largest = l
if r <= A.heap_size and A[r] > A[largest]
largest = r
if largest != i
exchange A[i], A[largest]
MAX_HEAPIFY(A, largest)
建堆
由于从
BUILD_MAX_HEAP(A)
for i = A.length / 2 downto 1
MAX_HEAPIFY(A, i)
堆排序
HEAP_SORT(A)
BUILD_MAX_HEAP(A)
for i = A.heap_size downto 1
exchange A[A.heap_size], A[1]
HEAPIFY(A, 1)
A.heap_size = A.heap_size - 1