TODO: heap sorting