// (N - 1)(N + log(N)) = (N^2 + Nlog(N) - N - log(N)) = O(N^2) private void UpdateDijkstraElements(DijkstraElement definitiveDijkstraElement) { int destinationIndex; foreach (Edge currentVertexEdge in definitiveDijkstraElement.IDVertex.EdgeList) { destinationIndex = DijkstraElements.FindIndex(DijkstraElement => DijkstraElement.IDVertex == currentVertexEdge.Destination); if (currentVertexEdge.Weight + definitiveDijkstraElement.AccumulatedDistance < DijkstraElements[destinationIndex].AccumulatedDistance) { DijkstraElements[destinationIndex].AccumulatedDistance = currentVertexEdge.Weight + definitiveDijkstraElement.AccumulatedDistance; DijkstraElements[destinationIndex].PreviousDijkstraElement = definitiveDijkstraElement; RelocateDijkstraElement(destinationIndex); } } }
// log(N) private void RelocateDijkstraElement(int index) { DijkstraElement temporalDijkstraElement = DijkstraElements[index]; int newIndex; DijkstraElements.RemoveAt(index); newIndex = DijkstraElements.BinarySearch(temporalDijkstraElement, new CompareDijkstraElementsByAccumulatedDistance()); if (newIndex < 0) { DijkstraElements.Insert(~newIndex, temporalDijkstraElement); } else { DijkstraElements.Insert(newIndex, temporalDijkstraElement); } }