Heap sort
L'heap sort sfrutta la proprietà dei max heap per cui in prima posizione è presente l'elemento più grande.
heapsort(Array A)
build_max_heap(A)
for i = A.length down to 2
swap(A[1], A[i])
A.heap_size--
max_heapify(A, 1)
L'algoritmo è corretto per l'invariante degli elementi:
Su
A[1..i]c'è un max heap con i più piccoli elementi diA, e suA[i+1..n]sono i più grandi ordinati
e quando il for termina i = 1 quindi l'invariante vale con A[2..n] ordinati e A[1] il più piccolo.
La complessità di heapsort è perchè max_heapify da viene chiamato volte.
L'algoritmo è in loco, ma non è stabile.