g3l:lab3_var1
Differences
This shows you the differences between two versions of the page.
| Next revision | Previous revision | ||
| g3l:lab3_var1 [2026/02/25 09:54] – created - external edit 127.0.0.1 | g3l:lab3_var1 [2026/02/25 10:00] (current) – eugeneai | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| - | ====== | + | ====== |
| - | **Задание:** Реализовать сортировку пузырьком с визуализацией процесса сортировки | + | ===== Общие требования ===== |
| + | | ||
| + | | ||
| + | * Программа должна | ||
| + | * Входные данные: | ||
| + | * Выходные данные: | ||
| - | **Пример входных данных:** | + | ===== Вариант 1: Пузырьковая сортировка (Bubble Sort) с пошаговым выводом ===== |
| - | < | + | **Тип сортировки:** Внутренняя, |
| - | f(x) = e^x - 3x = 0 | + | |
| - | Начальное | + | |
| - | Точность: 0.0001 | + | |
| - | </ | + | **Задание: |
| - | **Пример выходных данных:** | + | **Требования к визуализации: |
| + | * После каждого прохода выводить строку: | ||
| + | * Сравниваемые пары выделять скобками: (a b) | ||
| + | | ||
| - | < | + | **Пример вывода: |
| - | Корень уравнения: x = 1.5121 | + | |
| - | Количество итераций: 5 | + | |
| - | f(1.5121) = 0.00008 | + | Проход 1: |
| + | Сравнение (5 1): 1 <-> 5 -> [1, 5, 4, 2, 8] | ||
| + | Сравнение (5 4): 4 <-> 5 -> [1, 4, 5, 2, 8] | ||
| + | | ||
| + | Сравнение (5 8): обмена нет | ||
| + | Результат прохода 1: [1, 4, 2, 5, 8] | ||
| + | |||
| + | Проход 2: | ||
| + | | ||
| + | |||
| + | Отсортированный массив: | ||
| - | </ | + | ===== Вариант 2: Сортировка вставками (Insertion Sort) с гистограммой ===== |
| + | **Тип сортировки: | ||
| + | |||
| + | **Задание: | ||
| + | |||
| + | **Требования к визуализации: | ||
| + | * Каждый элемент отображается как столбец из символов '#' | ||
| + | * Высота столбца пропорциональна значению элемента | ||
| + | * Текущий вставляемый элемент выделять цветом/ | ||
| + | * Отсортированную часть отделять вертикальной чертой ' | ||
| + | |||
| + | **Пример вывода: | ||
| + | Шаг 1: Вставляем 4 | ||
| + | [###] | [#] [#####] [##] | ||
| + | 3 | ||
| + | | ||
| + | Шаг 2: Вставляем 5 | ||
| + | [#] [###] | [#####] [##] | ||
| + | | ||
| + | |||
| + | ===== Вариант 3: Сортировка выбором (Selection Sort) с анимацией в консоли ===== | ||
| + | |||
| + | **Тип сортировки: | ||
| + | |||
| + | **Задание: | ||
| + | |||
| + | **Требования к визуализации: | ||
| + | * Использовать модули времени (sleep) и очистки экрана (clear/cls) | ||
| + | * Показывать поиск минимального элемента | ||
| + | * Найденный минимум и текущую позицию для обмена выделять разными цветами | ||
| + | * Выводить счетчик сравнений | ||
| + | |||
| + | **Пример вывода (кадры анимации): | ||
| + | [5] {1} [4] [2] [8] (Поиск минимума: | ||
| + | [5] [1] [4] {2} [8] (Найден новый минимум {2}) | ||
| + | Обмен: [1] <-> [5] | ||
| + | [1] [5] [4] [2] [8] (После обмена) | ||
| + | |||
| + | ===== Вариант 4: Быстрая сортировка (Quick Sort) с рекурсивным деревом ===== | ||
| + | |||
| + | **Тип сортировки: | ||
| + | |||
| + | **Задание: | ||
| + | |||
| + | **Требования к визуализации: | ||
| + | * Показывать выбор опорного элемента (Pivot) | ||
| + | * Отображать разделение массива на левую и правую части | ||
| + | * Выводить отступами уровень рекурсии | ||
| + | * После каждой рекурсии показывать объединенный результат | ||
| + | |||
| + | **Пример вывода: | ||
| + | Уровень 0: [5, 1, 4, 2, 8] (pivot=5) | ||
| + | Левая часть: [1, 4, 2] | ||
| + | Уровень 1: [1, 4, 2] (pivot=1) | ||
| + | Левая часть: [] (пусто) | ||
| + | Правая часть: [4, 2] | ||
| + | Уровень 2: [4, 2] (pivot=4) | ||
| + | Левая часть: [2] | ||
| + | Правая часть: [] | ||
| + | Возврат: | ||
| + | Возврат: | ||
| + | Правая часть: [8] | ||
| + | Возврат: | ||
| + | |||
| + | ===== Вариант 5: Сортировка слиянием (Merge Sort) с визуализацией слияний ===== | ||
| + | |||
| + | **Тип сортировки: | ||
| + | |||
| + | **Задание: | ||
| + | |||
| + | **Требования к визуализации: | ||
| + | * Показывать разделение массива на две половины (стрелками вниз) | ||
| + | * Показывать процесс слияния (стрелками вверх) | ||
| + | * При слиянии выводить сравниваемые элементы из двух половин | ||
| + | * Использовать квадратные скобки для отслеживания указателей | ||
| + | |||
| + | **Пример вывода: | ||
| + | Делим: [5, 1, 4, 2, 8] | ||
| + | / | ||
| + | [5, 1, 4] [2, 8] | ||
| + | / | ||
| + | [5] | ||
| + | / \ | ||
| + | [1] [4] | ||
| + | | ||
| + | Сливаем: | ||
| + | Слияние [1] и [4] -> [1, 4] | ||
| + | Слияние [5] и [1, 4] -> сравниваем 5 и 1, берем 1; сравниваем 5 и 4, берем 4; берем 5 -> [1, 4, 5] | ||
| + | Слияние [2] и [8] -> [2, 8] | ||
| + | Слияние [1, 4, 5] и [2, 8] -> [1, 2, 4, 5, 8] | ||
| + | |||
| + | ===== Вариант 6: Шейкерная сортировка (Cocktail Shaker Sort) с направлением ===== | ||
| + | |||
| + | **Тип сортировки: | ||
| + | |||
| + | **Задание: | ||
| + | |||
| + | **Требования к визуализации: | ||
| + | * Использовать стрелки для показа направления прохода (→ и ←) | ||
| + | * После каждого прохода показывать границы отсортированной части | ||
| + | * Выводить текущее положение " | ||
| + | |||
| + | **Пример вывода: | ||
| + | Исходный: | ||
| + | | ||
| + | Проход → (0→3): | ||
| + | [1, 5, 4, 2, 8] (обмен 5 и 1) | ||
| + | [1, 4, 5, 2, 8] (обмен 5 и 4) | ||
| + | [1, 4, 2, 5, 8] (обмен 5 и 2) | ||
| + | Результат: | ||
| + | | ||
| + | Проход ← (3→1): | ||
| + | [1, 4, 2, 5, 8] ← | ||
| + | [1, 2, 4, 5, 8] (обмен 4 и 2 на позициях 1-2) | ||
| + | Результат: | ||
| + | |||
| + | ===== Вариант 7: Сортировка Шелла (Shell Sort) с визуализацией шагов ===== | ||
| + | |||
| + | **Тип сортировки: | ||
| + | |||
| + | **Задание: | ||
| + | |||
| + | **Требования к визуализации: | ||
| + | * Для каждого шага показывать, | ||
| + | * Выводить значение текущего шага (gap) | ||
| + | * Показывать подмассивы, | ||
| + | |||
| + | **Пример вывода: | ||
| + | Массив: | ||
| + | Шаг 1: gap = 5 | ||
| + | Сортируем подмассивы: | ||
| + | [9, 4] -> [4, 9] (индексы 0 и 5) | ||
| + | [8, 3] -> [3, 8] (индексы 1 и 6) | ||
| + | [7, 2] -> [2, 7] (индексы 2 и 7) | ||
| + | [6, 1] -> [1, 6] (индексы 3 и 8) | ||
| + | [5, 0] -> [0, 5] (индексы 4 и 9) | ||
| + | После шага 1: [4, 3, 2, 1, 0, 9, 8, 7, 6, 5] | ||
| + | |||
| + | ===== Вариант 8: Сортировка подсчетом (Counting Sort) с частотным словарем ===== | ||
| + | |||
| + | **Тип сортировки: | ||
| + | |||
| + | **Задание: | ||
| + | |||
| + | **Требования к визуализации: | ||
| + | * Показать процесс подсчета количества вхождений каждого числа | ||
| + | * Визуализировать массив счетчиков в виде гистограммы | ||
| + | * Показать восстановление отсортированного массива | ||
| + | |||
| + | **Пример вывода: | ||
| + | Исходный массив: | ||
| + | | ||
| + | Подсчет частот: | ||
| + | Значение: | ||
| + | Счетчик: | ||
| + | | ||
| + | Визуализация счетчиков: | ||
| + | 2: ## | ||
| + | 3: ## | ||
| + | 1: # | ||
| + | 4: # | ||
| + | 8: # | ||
| + | | ||
| + | Восстановление: | ||
| + | Берем 1 (1 раз): [1] | ||
| + | Берем 2 (2 раза): [1, 2, 2] | ||
| + | Берем 3 (2 раза): [1, 2, 2, 3, 3] | ||
| + | Берем 4 (1 раз): [1, 2, 2, 3, 3, 4] | ||
| + | Берем 8 (1 раз): [1, 2, 2, 3, 3, 4, 8] | ||
| + | |||
| + | ===== Вариант 9: Поразрядная сортировка (Radix Sort) с разрядами ===== | ||
| + | |||
| + | **Тип сортировки: | ||
| + | |||
| + | **Задание: | ||
| + | |||
| + | **Требования к визуализации: | ||
| + | * Показывать текущий разряд (единицы, | ||
| + | * Визуализировать распределение по корзинам (0-9) | ||
| + | * Показывать сборку массива после каждого разряда | ||
| + | |||
| + | **Пример вывода: | ||
| + | Массив: | ||
| + | | ||
| + | Разряд 1 (единицы): | ||
| + | Распределение по корзинам: | ||
| + | 0: [170, 90] | ||
| + | 2: [2, 802] | ||
| + | 4: [24] | ||
| + | 5: [45, 75] | ||
| + | 6: [66] | ||
| + | Сборка: | ||
| + | | ||
| + | Разряд 2 (десятки): | ||
| + | Распределение по корзинам: | ||
| + | 0: [2, 802] | ||
| + | 2: [24] | ||
| + | 4: [45] | ||
| + | 6: [66] | ||
| + | 7: [170, 75] | ||
| + | 9: [90] | ||
| + | Сборка: | ||
| + | |||
| + | ===== Вариант 10: Пирамидальная сортировка (Heap Sort) с визуализацией кучи ===== | ||
| + | |||
| + | **Тип сортировки: | ||
| + | |||
| + | **Задание: | ||
| + | |||
| + | **Требования к визуализации: | ||
| + | * Показывать бинарное дерево в текстовом виде | ||
| + | * Выделять текущую " | ||
| + | * Показывать обмен корня с последним элементом | ||
| + | |||
| + | **Пример вывода: | ||
| + | Построение кучи: | ||
| + | 5 | ||
| + | / \ | ||
| + | 1 4 | ||
| + | / \ | ||
| + | 2 8 | ||
| + | | ||
| + | Просеиваем 5: | ||
| + | 8 | ||
| + | / \ | ||
| + | 5 4 | ||
| + | / \ | ||
| + | 2 1 | ||
| + | | ||
| + | Сортировка: | ||
| + | Корень=8, | ||
| + | 1 | ||
| + | / \ | ||
| + | 5 4 | ||
| + | / | ||
| + | 2 | ||
| + | Просеиваем 1: | ||
| + | 5 | ||
| + | / \ | ||
| + | 1 4 | ||
| + | / | ||
| + | 2 | ||
| + | ... | ||
| + | |||
| + | ===== Вариант 11: Сортировка бинарным деревом (Binary Tree Sort) с графическим выводом ===== | ||
| + | |||
| + | **Тип сортировки: | ||
| + | |||
| + | **Задание: | ||
| + | |||
| + | **Требования к визуализации: | ||
| + | * Показывать вставку каждого элемента в дерево | ||
| + | * Отображать дерево с отступами (правые поддеревья с большим отступом) | ||
| + | * Показать симметричный обход (in-order traversal) для получения отсортированного массива | ||
| + | |||
| + | **Пример вывода: | ||
| + | Вставляем 5: | ||
| + | 5 | ||
| + | | ||
| + | Вставляем 3: | ||
| + | 5 | ||
| + | / | ||
| + | 3 | ||
| + | | ||
| + | Вставляем 7: | ||
| + | 5 | ||
| + | / \ | ||
| + | 3 7 | ||
| + | | ||
| + | Вставляем 2: | ||
| + | 5 | ||
| + | / \ | ||
| + | 3 7 | ||
| + | / | ||
| + | 2 | ||
| + | | ||
| + | Обход (in-order): 2, 3, 5, 7 | ||
| + | |||
| + | ===== Вариант 12: Гномья сортировка (Gnome Sort) с " | ||
| + | |||
| + | **Тип сортировки: | ||
| + | |||
| + | **Задание: | ||
| + | |||
| + | **Требования к визуализации: | ||
| + | * Позицию гнома отмечать символом ' | ||
| + | * Показывать движение вперед (→) и назад (←) | ||
| + | * Выводить каждое перемещение гнома | ||
| + | |||
| + | **Пример вывода: | ||
| + | [@5, 1, 4, 2, 8] (начало) | ||
| + | [5, @1, 4, 2, 8] (шаг вперед, | ||
| + | [1, @5, 4, 2, 8] (шаг назад, сравниваем 1 и 5 - порядок норм) | ||
| + | [1, 5, @4, 2, 8] (шаг вперед, | ||
| + | [1, @4, 5, 2, 8] (шаг назад, 1<4 - норм, шаг вперед) | ||
| + | [1, 4, @5, 2, 8] (5>2 - меняем) | ||
| + | [1, 4, 2, @5, 8] (шаг назад, 4>2 - меняем) | ||
| + | [1, 2, 4, @5, 8] (шаг назад, 1<2 - норм, вперед до конца) | ||
| + | |||
| + | ===== Вариант 13: Сортировка расческой (Comb Sort) с визуализацией фактора ===== | ||
| + | |||
| + | **Тип сортировки: | ||
| + | |||
| + | **Задание: | ||
| + | |||
| + | **Требования к визуализации: | ||
| + | * Показывать текущий шаг (gap) | ||
| + | * Сравниваемые элементы соединять линией в выводе | ||
| + | * Показывать уменьшение шага | ||
| + | |||
| + | **Пример вывода: | ||
| + | Массив: | ||
| + | Фактор: | ||
| + | | ||
| + | Шаг 1: gap = 8 → 6 | ||
| + | [8]----[2] → 8>2, меняем: | ||
| + | [4]----[7] → 4<7, без обмена | ||
| + | [1]----[3] → 1<3, без обмена | ||
| + | | ||
| + | Шаг 2: gap = 6 → 4 | ||
| + | [2]----[9] → 2<9, без обмена | ||
| + | ... | ||
| + | |||
| + | ===== Вариант 14: Сортировка перемешиванием (Odd-Even Sort) с параллельными сравнениями ===== | ||
| + | |||
| + | **Тип сортировки: | ||
| + | |||
| + | **Задание: | ||
| + | |||
| + | **Требования к визуализации: | ||
| + | * Четную фазу выделять одним цветом, | ||
| + | * Показывать все сравнения в фазе одновременно (как при параллельной работе) | ||
| + | * Выводить номер итерации и фазы | ||
| + | |||
| + | **Пример вывода: | ||
| + | Итерация 1: | ||
| + | Фаза 1 (четные индексы 0,2,4): | ||
| + | Сравниваем (0,1): [5,1] → [1,5] | ||
| + | Сравниваем (2,3): [4,2] → [2,4] | ||
| + | Сравниваем (4,5): [8,?] - нет пары | ||
| + | Результат: | ||
| + | | ||
| + | Фаза 2 (нечетные индексы 1,3): | ||
| + | Сравниваем (1,2): [5,2] → [2,5] | ||
| + | Сравниваем (3,4): [4,8] → без обмена | ||
| + | Результат: | ||
| + | |||
| + | ===== Вариант 15: Timsort (гибрид сортировки вставками и слиянием) с определением RUN ===== | ||
| + | |||
| + | **Тип сортировки: | ||
| + | |||
| + | **Задание: | ||
| + | |||
| + | **Требования к визуализации: | ||
| + | * Найти и выделить естественно упорядоченные последовательности (возрастающие/ | ||
| + | * Развернуть убывающие последовательности | ||
| + | * Отсортировать каждый RUN сортировкой вставками | ||
| + | * Слить RUN'ы с визуализацией слияния | ||
| + | |||
| + | **Пример вывода: | ||
| + | Анализ массива [5, 3, 2, 8, 9, 1, 4, 7]: | ||
| + | | ||
| + | Поиск RUN' | ||
| + | RUN 1 (убывающий): | ||
| + | RUN 2 (возрастающий): | ||
| + | RUN 3 (возрастающий): | ||
| + | | ||
| + | После сортировки RUN' | ||
| + | RUN 1: [2, 3, 5] | ||
| + | RUN 2: [8, 9] | ||
| + | RUN 3: [1, 4, 7] | ||
| + | | ||
| + | Слияние RUN 1 и RUN 2: | ||
| + | Сравниваем 2 и 8 → берем 2 | ||
| + | Сравниваем 3 и 8 → берем 3 | ||
| + | ... | ||
| + | Результат: | ||
| + | | ||
| + | Слияние с RUN 3: | ||
| + | Сравниваем 2 и 1 → берем 1 | ||
| + | Сравниваем 2 и 4 → берем 2 | ||
| + | ... | ||
| + | Итог: [1, 2, 3, 4, 5, 7, 8, 9] | ||
| + | |||
| + | ===== Критерии оценки ===== | ||
| + | * **3 балла: | ||
| + | * **4 балла: | ||
| + | * **5 баллов: | ||
| **Вариант 1:** Массив: | **Вариант 1:** Массив: | ||
| Line 61: | Line 463: | ||
| **Вариант 20:** Массив: | **Вариант 20:** Массив: | ||
| - | |||
| - | **Вариант 2:** Вариант задачи 2 для лабораторной 3.1 | ||
| - | |||
| - | **Вариант 3:** Вариант задачи 3 для лабораторной 3.1 | ||
| - | |||
| - | **Вариант 4:** Вариант задачи 4 для лабораторной 3.1 | ||
| - | |||
| - | **Вариант 5:** Вариант задачи 5 для лабораторной 3.1 | ||
| - | |||
| - | **Вариант 6:** Вариант задачи 6 для лабораторной 3.1 | ||
| - | |||
| - | **Вариант 7:** Вариант задачи 7 для лабораторной 3.1 | ||
| - | |||
| - | **Вариант 8:** Вариант задачи 8 для лабораторной 3.1 | ||
| - | |||
| - | **Вариант 9:** Вариант задачи 9 для лабораторной 3.1 | ||
| - | |||
| - | **Вариант 10:** Вариант задачи 10 для лабораторной 3.1 | ||
| - | |||
| - | **Вариант 11:** Вариант задачи 11 для лабораторной 3.1 | ||
| - | |||
| - | **Вариант 12:** Вариант задачи 12 для лабораторной 3.1 | ||
| - | |||
| - | **Вариант 13:** Вариант задачи 13 для лабораторной 3.1 | ||
| - | |||
| - | **Вариант 14:** Вариант задачи 14 для лабораторной 3.1 | ||
| - | |||
| - | **Вариант 15:** Вариант задачи 15 для лабораторной 3.1 | ||
| - | |||
| - | **Вариант 16:** Вариант задачи 16 для лабораторной 3.1 | ||
| - | |||
| - | **Вариант 17:** Вариант задачи 17 для лабораторной 3.1 | ||
| - | |||
| - | **Вариант 18:** Вариант задачи 18 для лабораторной 3.1 | ||
| - | |||
| - | **Вариант 19:** Вариант задачи 19 для лабораторной 3.1 | ||
| - | |||
| - | **Вариант 20:** Вариант задачи 20 для лабораторной 3.1 | ||
g3l/lab3_var1.1771984479.txt.gz · Last modified: by 127.0.0.1
