what algorithm is this
Records *records = initRecords(graph, startVertex);
while (!isEmpty(records->heap)) {
    Edge *min = extractMin(records->heap);
    records->finished[min->toVertex] = true;
    if (min->fromVertex != min->toVertex) {
        addTreeEdge(records, records->numTreeEdges, min->fromVertex, min->toVertex, min->weight);
    }
    AdjList *adj = graph->adjLists[min->toVertex];
    for (int i = 0; i < adj->numNeighbors; i++) {
        if (!records->finished[adj->neighbors[i].vertex]) {
            int weight = adj->neighbors[i].weight;
            if (weight < records->heap->array[adj->neighbors[i].vertex]->weight) {
                decreasePriority(records->heap, adj->neighbors[i].vertex, weight);
                records->predecessors[adj->neighbors[i].vertex] = min->toVertex;
            }
        }
    }
}
return records->tree;