def sort(self): nodes_length = len(self.nodes) swapped = True nb_iterations = 1 nb_iterations_text = None while swapped: self.remove(nb_iterations_text) nb_iterations_text = TextMobject("Iteration " + str(nb_iterations)) nb_iterations_text.move_to(2 * UP) self.add(nb_iterations_text) swapped = False arrow = Arrow(UP + RIGHT) # I don't get it arrow.scale(1) arrow.move_to(UP + 3 * LEFT) self.add(arrow) for i in range(nodes_length - 1): arrow.generate_target() arrow.target.move_to(self.nodes[i].circle.get_arc_center() + UP) self.play(MoveToTarget(arrow)) if self.nodes[i + 1].value < self.nodes[i].value: self.swap_nodes(i, i + 1) swapped = True self.remove(arrow) nb_iterations = nb_iterations + 1 self.wait(0.1) self.remove(nb_iterations_text)
def sort(self): nodes_length = len(self.nodes) arrow = Arrow(UP + RIGHT) # I don't get it arrow.scale(1) arrow.move_to(UP + 3 * LEFT) self.add(arrow) for i in range(nodes_length): arrow.generate_target() arrow.target.move_to(self.nodes[i].circle.get_arc_center() + UP) self.play(MoveToTarget(arrow)) index_min = self.find_index_minimum(i) if i != index_min: self.swap_nodes(i, index_min) self.nodes[i].circle.set_color(GREEN)
def sort(self): nodes_length = len(self.nodes) arrow = Arrow(UP + RIGHT) # I don't get it arrow.scale(1) arrow.move_to(UP + 3 * LEFT) self.add(arrow) for i in range(1, nodes_length): arrow.generate_target() arrow.target.move_to(self.nodes[i].circle.get_arc_center() + UP) self.play(MoveToTarget(arrow)) j = i while j > 0 and self.nodes[j].value < self.nodes[j - 1].value: self.swap_nodes(j, j - 1) j = j - 1 self.wait(0.1)
def find_index_minimum(self, from_index): arrow = Arrow(DOWN + RIGHT) # I don't get it arrow.scale(0.5) arrow.move_to(self.nodes[from_index].circle.get_arc_center() + DOWN) arrow.set_color(BLUE) self.add(arrow) index_min = from_index self.nodes[index_min].circle.set_color(BLUE) for i in range(from_index + 1, len(self.nodes)): arrow.generate_target() arrow.target.move_to(self.nodes[i].circle.get_arc_center() + DOWN) self.play(MoveToTarget(arrow)) if self.nodes[i].value < self.nodes[index_min].value: self.nodes[index_min].circle.set_color(RED) index_min = i self.nodes[index_min].circle.set_color(BLUE) self.remove(arrow) return index_min