Массивы: сортировка и поиск элементов — тренажёр для 9 класса
9 класс • Информатика
Тренажёр по теме «Массивы: сортировка и поиск элементов» для 9 класса на реализовывать и трассировать алгоритм сортировки пузырьком, реализовывать и трассировать алгоритм сортировки выбором, реализовывать линейный поиск и определять его сложность O(n). Задания соответствуют разделу «ФРП по информатике, 9 класс: Массивы. Алгоритмы сортировки: пузырьковая, выбором. Линейный и двоичный поиск. Анализ эффективности» федеральной рабочей программы. 10 заданий с автоматической проверкой ответов, подсказками и разбором решения. Заниматься можно бесплатно, без регистрации.
Задания в теме
Загружаем задание…
Справка
Проверено методистом
Михаил ИгнатьевУчитель высшей квалификационной категорииИсточник
[1] Примерная основная образовательная программа основного общего образования, раздел «ФРП по информатике, 9 класс: Массивы. Алгоритмы сортировки: пузырьковая, выбором. Линейный и двоичный поиск. Анализ эффективности», ФГОС ООО.
Что нужно уметь по этой теме
- реализовывать и трассировать алгоритм сортировки пузырьком
- реализовывать и трассировать алгоритм сортировки выбором
- реализовывать линейный поиск и определять его сложность O(n)
- реализовывать двоичный поиск и определять его сложность O(log n)
- сравнивать эффективность алгоритмов по количеству операций
Соответствие программе
Кодификатор ФИПИ: 9.3.2
ФРП: ФРП по информатике, 9 класс: Массивы. Алгоритмы сортировки: пузырьковая, выбором. Линейный и двоичный поиск. Анализ эффективности
Часы по ФРП на раздел: 8
Прогресс по этой теме: 0 верно, 0 неверно, 0 пропущено из 10 заданий.
Как разобраться в теме: полный разбор
Раздел 1 — Определение
Массив — это упорядоченная структура данных фиксированной длины, элементы которой хранятся под общим именем и различаются целочисленным индексом. Индексация в большинстве школьных языков (Python, Паскаль с нулевой базой, C) начинается с 0, поэтому в массиве a из n элементов допустимы индексы от 0 до n − 1.
Сортировка — это перестановка элементов массива в порядке неубывания (или невозрастания) значений. Поиск — это определение индекса элемента с заданным значением либо установление факта его отсутствия. Две задачи связаны напрямую: быстрый двоичный поиск работает только на отсортированном массиве.
Раздел «Массивы: сортировка и поиск» завершает линию алгоритмики 9 класса: ученик переходит от записи алгоритма к оценке его вычислительной сложности — зависимости числа операций от размера данных n, записываемой в нотации «О большое».
Раздел 2 — Ключевые правила
Сортировка и поиск оцениваются числом сравнений элементов — именно эта операция считается основной при анализе эффективности.
- Пузырьковая сортировка сравнивает соседние элементы
a[j]иa[j+1]и меняет их местами при нарушении порядка. За один проход наибольший элемент «всплывает» в конец: из[5, 3, 8, 1]после первого прохода получается[3, 5, 1, 8]. - Сортировка выбором на шаге
iнаходит индекс минимума в неотсортированной частиa[i..n−1]и один раз обменивает его сa[i]. Число обменов не превышаетn − 1. - Обе сортировки выполняют
n(n−1)/2сравнений и имеют сложность O(n²): приn = 100это 4950 сравнений, приn = 200— уже 19 900, то есть рост вчетверо при удвоении данных. - Линейный поиск просматривает элементы подряд от начала; в худшем случае (элемента нет) он делает
nсравнений — сложность O(n). Массив может быть неупорядоченным. - Двоичный поиск на каждом шаге сравнивает искомое значение
xсо средним элементомa[mid], гдеmid = (left + right) // 2, и отбрасывает половину отрезка. Число шагов не превышает⌈log₂(n+1)⌉— сложность O(log n). Обязательное условие — отсортированный массив. - Обмен двух элементов требует временной переменной:
t = a[i]; a[i] = a[j]; a[j] = t.
Раздел 3 — Разбор примеров
Пример 1. Трассировка пузырьковой сортировки массива `[5, 3, 8, 1]`.
Проход 1: (5,3) → обмен [3,5,8,1]; (5,8) → без обмена; (8,1) → обмен [3,5,1,8]. Проход 2: (3,5) — нет; (5,1) → обмен [3,1,5,8]. Проход 3: (3,1) → обмен [1,3,5,8].
Сравнений: 3 + 2 + 1 = 6 = 4·3/2. Каждый следующий проход короче предыдущего, потому что хвост массива уже отсортирован. Вывод: внешний цикл i от 0 до n−2, внутренний j от 0 до n−2−i.
Пример 2. Трассировка сортировки выбором массива `[7, 2, 9, 4]`.
Шаг i=0: минимум 2 (индекс 1) → обмен с a[0] → [2,7,9,4]. Шаг i=1: минимум остатка [7,9,4] равен 4 (индекс 3) → обмен → [2,4,9,7]. Шаг i=2: минимум [9,7] равен 7 → обмен → [2,4,7,9].
Сравнений те же 6, но обменов только 3 против пяти у пузырька. Вывод: при «дорогом» перемещении данных выбором выгоднее.
Пример 3. Линейный поиск числа 9 в `[4, 7, 1, 9, 3]`. Сравнения: 4≠9, 7≠9, 1≠9, 9=9 → возвращается индекс 3 после четырёх сравнений. Поиск числа 6 потребует всех пяти сравнений и вернёт −1. Вывод: среднее число сравнений ≈ n/2, худшее = n, что и даёт O(n).
Пример 4. Двоичный поиск числа 66 в `[3, 7, 12, 18, 23, 29, 34, 41, 50, 66]`.
left=0, right=9, mid=4: 23 < 66 → left=5. mid=7: 41 < 66 → left=8. mid=8: 50 < 66 → left=9. mid=9: 66 = 66 → индекс 9.
Четыре сравнения вместо десяти, при этом ⌈log₂11⌉ = 4. Вывод: каждый шаг уменьшает зону поиска вдвое, поэтому рост n в 1000 раз добавляет лишь ≈10 шагов.
Раздел 4 — Таблица
| Алгоритм | Требование к данным | Сравнений в худшем случае | Сложность | Сравнений при n = 1024 |
|---|---|---|---|---|
| Пузырьковая сортировка | любой массив | n(n−1)/2 | O(n²) | 523 776 |
| Сортировка выбором | любой массив | n(n−1)/2 | O(n²) | 523 776 |
| Линейный поиск | любой массив | n | O(n) | 1024 |
| Двоичный поиск | массив отсортирован | ⌈log₂(n+1)⌉ | O(log n) | 10 |
| Алгоритм | Число обменов (худший случай) | Работает «на месте» |
|---|---|---|
| Пузырьковая сортировка | n(n−1)/2 | да |
| Сортировка выбором | n − 1 | да |
Раздел 5 — Типичные ошибки
Двоичный поиск в неотсортированном массиве. Ученик применяет быстрый алгоритм к произвольным данным и получает −1 для присутствующего элемента. Неправильно: binary_search([4,7,1,9], 1) → −1. Правильно: сначала отсортировать массив, затем искать, либо использовать линейный поиск.
Выход за границу массива. Во внутреннем цикле пузырька пишут for j in range(n) и обращаются к a[j+1] при j = n−1. Правильно: for j in range(0, n−1−i) — верхняя граница уменьшается на уже отсортированный хвост.
Потеря значения при обмене. Запись a[i] = a[j]; a[j] = a[i] копирует одно значение дважды: массив [7,2] превращается в [2,2]. Правильно: ввести временную переменную t либо использовать a[i], a[j] = a[j], a[i].
Дробный индекс середины. Формула mid = (left + right) / 2 в Python даёт 4.5 и ошибку обращения по индексу. Правильно: целочисленное деление // (в Паскале — div).
Зацикливание двоичного поиска. Присваивание left = mid вместо left = mid + 1 оставляет отрезок неизменным, цикл while left <= right не завершается. Правильно: границы всегда сдвигаются за проверенный элемент: left = mid + 1 или right = mid − 1.
Раздел 6 — Пошаговый алгоритм
- Определить задачу: упорядочить массив или найти элемент.
- Проверить, отсортированы ли данные; при поиске в неупорядоченном массиве выбрать линейный поиск.
- Записать границы циклов через
n: внешний —0 … n−2, внутренний в пузырьке —0 … n−2−i. - Оформить обмен через временную переменную.
- Выполнить трассировку на массиве из 4–5 элементов, записывая состояние массива после каждого прохода.
- Подсчитать число сравнений и сопоставить с формулой:
n(n−1)/2для сортировок,nдля линейного,⌈log₂(n+1)⌉для двоичного поиска. - Проверить результат: массив неубывающий (
a[i] ≤ a[i+1]для всехi), найденный индекс удовлетворяет условиюa[k] = x, а отсутствие элемента даёт −1.
Раздел 7 — Как запомнить
- «Пузырёк — соседи, выбор — минимум»: пузырьковая сортировка сравнивает пары рядом, выбором ищет наименьший во всём остатке.
- «Тяжёлый тонет, лёгкий всплывает» — за один проход пузырька крайний элемент занимает окончательное место.
- «Половина, ещё половина» — признак логарифма: 1024 → 512 → 256 → … → 1, ровно 10 делений.
- Формула-опора:
1 + 2 + … + (n−1) = n(n−1)/2— число сравнений обеих квадратичных сортировок. - Три условия двоичного поиска: сортировка, целое `mid`, сдвиг границы на ±1.
Частые вопросы
Сколько проходов делает пузырьковая сортировка для массива из n элементов?
n − 1 проходов.
Чем двоичный поиск лучше линейного?
Двоичный поиск значительно быстрее: O(log n) против O(n), но требует отсортированного массива.
При каком условии можно применять двоичный поиск?
Массив должен быть отсортирован.
Сколько максимум шагов потребует двоичный поиск в массиве из 16 элементов?
log₂(16) + 1 = 4 + 1 = 5 шагов.
В чём идея сортировки выбором?
На каждом шаге находим минимальный элемент в оставшейся части и ставим его на нужную позицию.