Sortowanie na planszy

Sortowanie bąbelkowe - Informatyka - liceum klasa 2 (Python)

Animacja pokazuje sortowanie bąbelkowe krok po kroku. Każda liczba to słupek (8 jednostek wysokości na jednostkę wartości). W każdym kroku: - porównywana para jest **pomarańczowa**, gdy zostaje bez zmian, - **czerwona**, gdy elementy zostały zamienione, - elementy już na swoich miejscach (koniec listy) są **zielone**. Funkcja `draw(values, colors)` czyści planszę (`world.clear_trails()`) i rysuje wszystkie słupki od nowa.

arrow = Sprite()
arrow.image = 16
arrow.size = 10
world.add(arrow)
arrow.visible = False
def draw(values, colors=None):
    world.clear_trails()
    for i, v in enumerate(values):
        if colors:
            arrow.pen.color = colors[i]
        else:
            arrow.pen.color = (99, 102, 241)
        arrow.pen.on = False
        arrow.position = (-90 + 14 * i, -80)
        arrow.angle = 0
        arrow.pen.on = True
        for side in [8 * v, 10, 8 * v, 10]:
            arrow.move(side)
            arrow.turn(90)
    arrow.pen.on = False

values = [7, 3, 9, 1, 5, 8, 2]

class BubbleSort(Sprite):
    def __init__(self):
        self.visible = False
        self.i = 0
        self.j = 0
        self.wait = 0

    def update(self):
        self.wait += 1
        if self.wait < 15:
            return
        self.wait = 0
        n = len(values)
        if self.i >= n - 1:
            draw(values, [(22, 163, 74)] * n)
            world.stop()
            return
        colors = [(99, 102, 241)] * n
        for k in range(n - self.i, n):
            colors[k] = (22, 163, 74)
        j = self.j
        if values[j] > values[j + 1]:
            values[j], values[j + 1] = values[j + 1], values[j]
            colors[j] = colors[j + 1] = (220, 38, 38)
        else:
            colors[j] = colors[j + 1] = (234, 88, 12)
        draw(values, colors)
        self.j += 1
        if self.j >= n - 1 - self.i:
            self.i += 1
            self.j = 0

draw(values)
world.add(BubbleSort())
world.start()

Ładowanie interaktywnego edytora... Jeśli się nie pojawi, włącz JavaScript.

Wszystkie lekcje kursu Informatyka - liceum klasa 2·Zaloguj się, aby zapisać postęp na koncie.