Федеральный портал школ России
Закрыть

Урок 16. Python: Сортировка выбором

18.10.2026 - Андрей -

  • Учебные программы
  • Информатика

Программирование на Python и C++ · 9 класс

Урок 16 из 34 · 45 минут · Модуль «Сортировка»

Уровень: начинающий программист; Python 3.

Вся программа курса

Можно искать минимум оставшейся части и ставить его на очередное место. Такой способ делает мало обменов, но всё равно просматривает много пар.

Результат урока: Реализовать сортировку выбором, доказать правильность левого префикса, проверить число сравнений и показать ограничение устойчивости.
Учителю: подготовка и план на 45 минут

Подготовьте компьютер, редактор, папку с правом записи, распечатку ученической части PDF, бумагу и ручку. Python 3.11+ и IDLE или редактор; запуск python lesson.py (либо python3 lesson.py). Внешние библиотеки не нужны. Установку и проверку запуска учитель выполняет заранее. Все программы, данные и ожидаемые ответы даны; регистрация детей и интернет на занятии не нужны.

Уровень — начинающий программист, 9 класс. Предпосылки: минимум списка, индексы, вложенные циклы и обмен. В паре автор прогнозирует и вводит код, проверяющий ведёт журнал, затем роли меняются. Без компьютера выполните трассировку полного кода на бумаге и сопоставьте с готовыми результатами; учитель демонстрирует подготовленный запуск. Бумажный вариант не считается фактическим запуском ученика. Перед практикой учитель выдаёт готовый файл разобранного примера, чтобы дети тратили время на изменение и проверку, а не длинное перепечатывание. Матрица программы предназначена учителю.

МинутыРаботаРезультат
0–5ПроблемаВопрос и первое решение
5–14Понятия и примерСпособ проверки
14–25Практика 1Готовый продукт и проверка
25–33Практика 2Перенос способа
33–40ОбсуждениеАргумент и ограничение
40–45Индивидуальная проверкаСамостоятельный ответ

01. Проблемная ситуация

0–5 минут. В [4,2,3,1] найдите минимум всей серии, поменяйте его с первым элементом. Затем найдите минимум оставшейся части. Какие позиции уже можно не трогать?

02. Понятия и разобранный пример

5–14 минут: 4 минуты на понятия, 3 на пример, 2 на объяснение способа партнёру.

Минимум неотсортированной части

На шаге i ищем индекс best минимального элемента от i до конца. После поиска выполняем один обмен a[i],a[best], если best!=i. Первые i+1 элементов после этого шага — наименьшие элементы в нужном порядке. В отличие от пузырька, здесь строится левый готовый префикс.

Функция работает с копией, считает сравнения значений и реальные обмены разных позиций. Контракт: список до 100 целых от -1000 до 1000. Для любой серии длины n число сравнений равно n*(n-1)/2, даже если она уже отсортирована. Обменов не больше n-1.

Обычная сортировка выбором с обменом неустойчива: может переставить записи с равными ключами. Пример [2A,2B,1C]: обмен первого элемента с минимумом даёт [1C,2B,2A]. Числа отсортированы, но относительный порядок A,B изменился.

Отступы набирайте обычными пробелами: 4 на уровень. При копировании с веб-страницы замените неразрывные пробелы обычными; полный код с обычными пробелами есть в PDF.

[4,2,3,1]: шаг i=0 выбирает индекс 3 и получает [1,2,3,4]; i=1 и i=2 находят минимум уже на месте. Всего 3+2+1=6 сравнений и один обмен.

def selection(data):
    a = data.copy()
    comparisons = swaps = 0
    for i in range(len(a)-1):
        best = i
        for j in range(i+1, len(a)):
            comparisons += 1
            if a[j] < a[best]:
                best = j
        if best != i:
            a[i], a[best] = a[best], a[i]
            swaps += 1
    return a, comparisons, swaps

for a in [[4,2,3,1],[],[7],[1,2,3],[3,2,1]]:
    print(a, selection(a))
Левый готовый префикс растёт; минимум ищется только в оставшейся части.
Левый готовый префикс растёт; минимум ищется только в оставшейся части.

03. Практика 1. Проверяем материал

Проверяем левый префикс

14–25 минут. Запишите best и готовый префикс после каждого внешнего шага для таблицы, затем запустите программу.

ВходРезультат; сравнения; обмены
[4,2,3,1][1,2,3,4]; 6; 1
[]; [7][]; 0; 0 и [7]; 0; 0
[1,2,3]; [3,2,1][1,2,3]; 3; 0 и [1,2,3]; 3; 1
[2,2,1][1,2,2]; 3; 1

2 минуты — прогноз; 4 — запуск; 3 — сопоставление с sorted и формулой сравнений; 2 — объяснение неизменности входа. Критерии: порядок, кратности, исходник, различие сравнения и обмена.

Практика 1: разбор и критерии

Для отсортированного [1,2,3] всё равно 3 сравнения, хотя обменов 0. Для [3,2,1] один обмен крайних элементов завершает числовую перестановку, но оставшийся поиск всё равно выполняется. Счётчик comparisons увеличивается на каждой паре j,best, swaps — только при best!=i.

04. Практика 2. Перенос способа

Исследуем порядок равных ключей

25–33 минуты. Даны записи (ключ,метка): [(2,"A"),(2,"B"),(1,"C")]. За 2 минуты предскажите порядок меток, за 4 запустите код ниже, за 2 сравните с исходным порядком A перед B. Критерии: сравнение только ключа [0], показ конкретного обмена, вывод об устойчивости.

def selection_records(data):
    a = data.copy()
    for i in range(len(a)-1):
        best = i
        for j in range(i+1,len(a)):
            if a[j][0] < a[best][0]:
                best = j
        a[i], a[best] = a[best], a[i]
    return a

print(selection_records([(2,"A"),(2,"B"),(1,"C")]))
Практика 2: разбор и критерии

Результат [(1,"C"),(2,"B"),(2,"A")]. Обмен A с C переносит A за B, хотя два ключа равны. Упорядоченность по ключу соблюдена, устойчивость нарушена. Сравнение целых кортежей вместо [0] добавило бы сортировку по меткам и изменило контракт.

05. Обсуждение и границы вывода

33–40 минут. За 2 минуты сопоставьте пузырёк и выбор на [1,2,3], за 3 обсудите сравнения и обмены отдельно, за 2 выберите способ для записей, где надо сохранить порядок равных ключей.

Обсуждение: возможный вывод

Пузырёк с ранним выходом: 2 сравнения, 0 обменов; выбор: 3 сравнения, 0 обменов. Малое число обменов не означает малое число сравнений. Для устойчивой сортировки записей используйте sorted(records,key=lambda p:p[0]); относительный порядок равных ключей сохраняется. Наш выбор с обменом этого не гарантирует.

06. Индивидуальная проверка

40–45 минут. Для [3,1,2] укажите результат selection, сравнения, обмены и максимальное число сравнений при n=100. Четыре балла.

Индивидуальная проверка: ответ и критерии

[1,2,3]; 3; 2; 4950. Каждый пункт — один балл; последняя величина одинакова для всех входов длины 100.

07. Соответствие исходной программе

Пункт программы → действие → результат
Пункт программыДействие ученикаПроверяемый результат
Алгоритмы сортировкиПроверяем левый префиксРеализовать сортировку выбором, доказать правильность левого префикса, проверить число сравнений и показать ограничение устойчивости.
Структурирование решения и отладкаИсследуем порядок равных ключейИсходник, журнал обычных и граничных тестов; индивидуальный ответ
Источники и права на изображения

Тексты, учебные данные, реплики, программы и схемы подготовлены для уроков портала «Школы России». Числовые серии — учебные модели, не результаты проведённых классом опытов. Схемы авторские, сторонние фотографии не используются. Методические ссылки приведены для учителя; ученик получает все материалы здесь. Проверка первичных источников: 18.10.2026.