@@ -5,6 +5,25 @@ def find_root(vertex: Vertex = None) -> Vertex:
55 vertex = vertex .root
66 return vertex
77
8+ def sort_edges_by_weight_increasingly (edges : list ) -> list :
9+ # edges [[label1, label2, weight], [label1, label2, weight]]
10+ if len (edges ) < 2 :
11+ return edges
12+
13+ pivot_index : int = len (edges ) // 2
14+ pivot_value = edges [pivot_index ][2 ]
15+ left_list : list = []
16+ right_list : list = []
17+ for i in range (len (edges )):
18+ if i != pivot_index :
19+ if edges [i ][2 ] < pivot_value :
20+ left_list .append (edges [i ])
21+ else :
22+ right_list .append (edges [i ])
23+
24+ return sort_edges_by_weight_increasingly (left_list ) + [edges [pivot_index ]] + sort_edges_by_weight_increasingly (right_list )
25+
26+
827
928class Graph :
1029 def __init__ (self ):
@@ -18,9 +37,13 @@ def add_edge(self, vertex_1_label: str = None, vertex_2_label: str = None, weigh
1837 if vertex_1_label not in self .vertices or vertex_2_label not in self .vertices :
1938 raise Exception ("Invalid label name" )
2039 self .edges .append ([vertex_1_label , vertex_2_label , weight ])
40+ self .edges .append ([vertex_2_label , vertex_1_label , weight ])
2141
2242 def kruskal (self ):
43+ print (self .edges )
2344 # sort edges by weight increasingly
45+ self .edges = sort_edges_by_weight_increasingly (self .edges )
46+ print (self .edges )
2447 minimum_spanning_tree : list = []
2548 for edge_list in self .edges :
2649 vertex_one : Vertex = self .vertices [edge_list [0 ]]
0 commit comments