what algorithm does this use
Records *records = initRecords(graph, startVertex);
while (!isEmpty(records->heap)) {
    Heapnode min = extractMin(records->heap);
    records->finished[min.id] = true;
    addTreeEdge(records, records->numTreeEdges, min.id, records->predecessors[min.id], min.priority);
    AdjList *neighbors = graph->vertices[min.id];
    while (neighbors != NULL) {
        if (records->finished[neighbors->edge->toVertex] == false) {
            if (neighbors->edge->weight < records->heap->arr[records->heap->indexMap[neighbors->edge->toVertex]].priority) {
                decreasePriority(records->heap, neighbors->edge->toVertex, neighbors->edge->weight);
                records->predecessors[neighbors->edge->toVertex] = min.id;
            }
        }
    }
}
return records->tree;