Рубрики
Без рубрики

Музыкальный пузырь Сортировка в Python

Исследуйте алгоритм сортировки пузыря в Python с использованием музыкальных нот. Слушайте, как примечания меняют положение как алгоритм прогрессирует.

Автор оригинала: Robin Andrews.

Я твердый верующий, предлагая широкое разнообразие перспектив на темах, которые я учу в информатике. Мне также нравится делать связи между информатикой и другими предметами. В этот конец я даю вам:

Сортировка пузыря представлена через нетрадиционную среду для вашего интереса и рассмотрения в качестве помощи обучения

Вы можете услышать его в действии здесь:

Этот трек был сделан с использованием языка программирования Python, а также небольшая библиотека под названием MusicalBeeps Отказ Вы можете найти пакет на Пипи здесь Отказ Чтобы установить его, просто используйте Пип Установите MusicalBeeps из командной строки.

Код в основном просто простая старая реализация пузырьков в Python, с несколькими дополнительными линиями кода для обработки воспроизведения звука для каждой конфигурации музыкальных нот, хранящихся в списке Python.

Я предоставил код ниже в случае, если вы хотите попробовать это для себя. Как вы, вероятно, знаете, Bubble Sort поступает в несколько разных ароматов. Я предоставил две версии, которые оба сортируют данные «Bubling» самое высокое значение в направлении правого конца списка. Разница между версиями состоит в том, что первый продолжает пытаться отсортировать данные, даже когда полный проход был сделан без свопов, а второй использует это последнее состояние как «доказательство», что данные сортируются, и поэтому выходы рано.

Музыкальный пузырь Python Сортировка в C главной версии 1

import musicalbeeps
import random

# notes = ["A", "Bb", "C5", "E5", "F5", "A5"]  # Phrygian Pentatonic anyone?
notes = ["C", "D", "E", "F", "G", "A", "B", "C5"]


def play_seq(seq):
    for pos in seq:
        player.play_note(notes[pos], 0.2)


def bubble_sort(arr):
    """
    Returns a list sorted in ascending order. We are assuming an integer list as input
    """
    length = len(arr)
    for passnum in range(length - 1):
        for i in range(length - 1 - passnum):
            if arr[i] > arr[i + 1]:
                temp = arr[i + 1]
                arr[i + 1] = arr[i]
                arr[i] = temp
            print("After Pass " + str(passnum + 1) + ", inner loop " + str(i + 1) + ":", arr)
            play_seq(arr)
            player.play_note("pause", 0.4)
        player.play_note("pause", 0.8)

    return arr


player = musicalbeeps.Player(volume=0.3,
                             mute_output=True)

initial = list(range(len(notes)))
initial = [0, 1, 3, 2, 4, 5, 6, 7]  # Comment as needed
# random.shuffle(initial)  # Uncomment as needed
print(bubble_sort(initial))

Музыкальный пузырь Python Сортировать в C главной версии 2

Это версия «ранней выхода», которая часто более эффективна.

import musicalbeeps
import random

# notes = ["A", "Bb", "C5", "E5", "F5", "A5"]
notes = ["C", "D", "E", "F", "G", "A", "B", "C5"]


def play_seq(seq):
    for pos in seq:
        player.play_note(notes[pos], 0.4)


def bubble_sort(arr):
    """
    Returns a list sorted in ascending order. We are assuming an integer list as input
    """
    length = len(arr)
    passnum = 0
    no_swaps = False
    while passnum < length - 1 and no_swaps is False:
        no_swaps = True
        for i in range(length - 1 - passnum):
            if arr[i] > arr[i + 1]:
                temp = arr[i + 1]
                arr[i + 1] = arr[i]
                arr[i] = temp
                no_swaps = False
            print("After Pass " + str(passnum + 1) + ", inner loop " + str(i + 1) + ":", arr)
            play_seq(arr)
            player.play_note("pause", 0.4)
        passnum += 1
        player.play_note("pause", 0.4)

    return arr


player = musicalbeeps.Player(volume=0.3,
                             mute_output=True)

initial = list(range(len(notes)))
initial = [0, 1, 3, 2, 4, 5, 6, 7]
# random.shuffle(initial)
print(bubble_sort(initial))

Я рекомендую вам взять этот код в качестве отправной точки для ваших собственных экспериментов. Попробуйте изменить некоторые значения, используя другие заметки и масштабы и т. Д. Может быть адаптировать код для другого алгоритма, как Сортировка вставки.

Быстрое слово о слуховом обучении

Видимо “Вак” был разграблен. То есть никакого убедительного доказательства не было обнаружено, что студенты имеют внутренние различия в их способности учиться через Визуальный против слуховой против кинестетический Модальности. Однако это принципиально разная проблема для того, будет ли обучение через множество средств массовой информации. Это кажется очевидно для меня, и исследование поддерживает его, что представляя субъекту через несколько каналов поможет с первоначальным пониманием и углублением/интеграцией обучения. Кроме того, для учащихся с нарушениями зрения или проблем с нарушением слуха разница в стиле, очевидно, очень значительна.

Так что будьте осторожно, когда вы слышите, что «Vak был разграблен», что вы не принимаете неправильно, что используете Визуальный и слуховой и кинестетический значит учить и учиться – «ненаучно». Возможно, некоторые виды деятельности, вероятно, (или, по крайней мере, кажутся) более подходят для конкретного подхода, чем другие, но я бы никогда не хотел бы быть жестким об этом и подавить педагогическое творчество.

Хорошо, так что это было только для людей, у которых есть оговорки об использовании забавных, инновационных, творческих средств обучения и преподавания, при этом захватывающие перекрестные соединения, которые могут помочь студентам оставаться вовлеченными и мотивированными. Для остальных из вас Если музыка будет едой любви, играть дальше.

Счастливые вычисления!