what algorithm does this use
Records *records = initRecords(graph, startVertex);
while (!isEmpty(records->head)) {
    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) {
        int maybe_shorter = min.priority + neighbors->edge->weight;
        int index = records->heap->indexMap[neighbors->edge->toVertex];
        if (records->finished[neighbors->edge->toVertex] == false && maybe_shorter < records->heap->arr[index].priority) {
            decreasePriority(records->heap, neighbors->edge->toVertex, maybe_shorter) records->predecessors[neighbors->edge->toVertex] = min.id;
        }
        neighbors = neighbors->next;
    }
}