The running time of the DijkstrasAlgorithm routine is dominated by the running time of the main loop (lines 8-35). (It is easy to see that lines 3-7 run in constant time, and lines 38-45 run in time).
To determine the running time of the main loop, we proceed as follows: First, we ignore temporarily the time required for the Enqueue and Dequeue operations in the priority queue. Clearly, each vertex in the graph is processed exactly once. When a vertex is processed all the edges emanating from it are considered. Therefore, the time (ignoring the priority queue operations) taken is O(|V|+|E|) when adjacency lists are used and when adjacency matrices are used.
Now, we add back the worst-case time required for the priority queue operations. In the worst case, a vertex is enqueued and subsequently dequeued once for every edge in the graph. Therefore, the length of the priority queue is at most . As a result, the worst-case time for each operation is .
Thus, the worst-case running time for Dijkstra's algorithm is
when adjacency lists are used, and
when adjacency matrices are used to represent the input graph.