"Информатика (в 2-х частях)", Горячев А.В., Герасимова В.Г., Макарина Л.А., Островский С.Л., Паволоцкий А.В., Семёнов А.А., Юдина А.Г., Чернышёва Т.Л.
Упорядочение массива — это перестановка его элементов по заданному правилу, например от меньшего к большему. Сортировка помогает быстрее искать данные, сравнивать значения и показывать их в удобном порядке. Важно не изменить состав массива: меняются только места элементов. Для сортировки выбором находят крайнее значение в неотсортированной части, а при сортировке обменами сравнивают соседние элементы и при необходимости меняют их местами.
Текст подготовлен нейронной сетью по теме параграфа и не заменяет учебник — важные факты и формулировки сверяйте с ним.
Упорядочение массива — перестановка его элементов по заданному правилу, например по возрастанию или убыванию. Меняются позиции значений, а не сам набор данных. Это нужно, чтобы расположить информацию в понятном порядке и упростить её дальнейшую обработку.
Порядок по возрастанию означает, что каждый следующий элемент не меньше предыдущего; по убыванию — не больше предыдущего. Например, массив 1, 3, 3, 7 упорядочен по возрастанию, хотя два соседних значения равны. Такое условие помогает точно определить, правильно ли расположены элементы.
Сортировка выбором — способ упорядочить массив, последовательно находя наименьший или наибольший элемент неотсортированной части и ставя его на нужное место. Например, для возрастания сначала выбирают минимум. Этот способ удобен тем, что на каждом шаге понятно, какое место массива уже получило окончательное значение.
Сортировка обменами — способ упорядочить массив, сравнивая соседние элементы и меняя их местами, если они стоят не в нужном порядке. Несколько таких сравнений постепенно сдвигают значения к нужному краю. Метод позволяет увидеть, как локальные исправления соседних пар приводят к общему порядку.
Сортировка нужна не только для красоты: по упорядоченным данным проще искать, сравнивать значения и замечать крайние элементы. Например, список оценок по возрастанию сразу показывает минимальную и максимальную оценку по краям. Когда данные расположены предсказуемо, человеку и программе легче их анализировать.
При сортировке выбором мысленно отделяют уже отсортированную часть от той, которую ещё нужно обработать. На первом шаге находят подходящий крайний элемент во всём массиве, затем — в остатке без уже поставленных значений. Так граница отсортированной части сдвигается на одну позицию, потому что найденный элемент уже занимает своё окончательное место.
При сортировке обменами сравнивают соседние элементы и переставляют их, если порядок пары неверный. При проходе по массиву большие значения могут постепенно перемещаться вправо, а маленькие — влево; конкретное направление зависит от условия сравнения. Поэтому одного обмена обычно недостаточно: проходы повторяют, чтобы исправить порядок во всём массиве.
В программе сортировку задают циклами и сравнениями по индексам. При обмене сначала сохраняют одно значение во временной переменной, затем записывают на его место соседнее и возвращают сохранённое значение на освободившееся место. После каждого выбора или прохода часть массива оказывается упорядоченной, поэтому следующий шаг может обрабатывать оставшиеся позиции.
Алгоритм полезно проверить на небольшом массиве, записывая после каждого шага индексы и значения. Такая проверка помогает заметить неправильное условие, потерянный элемент или ошибку в границах цикла до запуска программы на больших данных. В конце нужно убедиться и в правильном порядке, и в том, что каждый исходный элемент остался в массиве.
Таблица показывает, где именно различаются два способа: в выборе элементов для сравнения и в действии на каждом шаге. Сверяй строку «Что происходит за один проход» с тем, как устроен алгоритм. Условие завершения в программе должно гарантировать, что обработаны все нужные позиции.
| Свойство | Сортировка выбором | Сортировка обменами |
|---|---|---|
| Основное действие | Поиск крайнего значения и постановка на нужное место | Обмен соседних элементов, если их порядок неверен |
| Какие элементы сравнивают | Текущий минимум или максимум с элементами неотсортированной части | Соседние элементы массива |
| Как меняются элементы массива | Выбранный элемент меняют местами с первым элементом неотсортированной части | Меняют местами соседнюю пару |
| Что происходит за один проход | На границе частей оказывается один подходящий крайний элемент | Значения постепенно сдвигаются к одному из краёв |
| Условие завершения | Обработаны все позиции, кроме последней | Выполнены проходы, после которых соседние пары упорядочены |
Задача 1. Упорядочить массив [4, 1, 3] по возрастанию способом выбора. Нужно каждый раз искать минимум только среди значений, которые ещё не заняли окончательное место. Поэтому после первого шага элемент с минимальным значением больше не участвует в поиске.
Ответ: [1, 3, 4]. Каждый выбранный минимум поставлен на очередную позицию слева, поэтому массив идёт по возрастанию.
Задача 2. Упорядочить [5, 2, 4, 1] по убыванию способом обменов. Для убывания левый элемент соседней пары должен быть не меньше правого. Если слева стоит меньшее значение, пару нужно поменять местами, чтобы большие числа постепенно перемещались к началу.
Ответ: [5, 4, 2, 1]. При одинаковых соседях обмен не требуется, так как равенство не нарушает порядок по убыванию.
Задача 3. Составить алгоритм сортировки n чисел по возрастанию и проверить его на массиве с повторяющимися значениями. Для сортировки выбором внешний цикл задаёт очередную позицию, а внутренний ищет минимум в оставшейся части. Пример с повтором нужен, чтобы проверить: алгоритм переставляет значения, а не удаляет одинаковые элементы.
Ответ: алгоритм с внешним и внутренним циклами сортирует массив по возрастанию, если границы циклов не выходят за длину массива. На проверочном примере повторяющиеся значения сохранены.
Для сортировки нужны навыки работы с массивами: обращение к элементу по индексу, циклы и сравнение значений. Если индекс или граница цикла выбраны неверно, алгоритм может пропустить элемент либо выйти за пределы массива. Поэтому полезно представлять, какие позиции обрабатываются на каждом шаге.
Упорядочение применяют при подготовке данных к поиску, обработке таблиц и разработке программ для наборов чисел или записей. Сортировать можно не только числа: например, записи можно расположить по фамилии или дате. Правило сортировки в таком случае задаёт, какое поле сравнивать.
Зачем упорядочивать массив?
Упорядоченные данные удобнее просматривать и сравнивать. Сортировка также может упростить поиск нужного значения и дальнейшую обработку массива.
Чем сортировка по возрастанию отличается от сортировки по убыванию?
При возрастании каждый следующий элемент не меньше предыдущего: значения идут от меньших к большим. При убывании каждый следующий элемент не больше предыдущего, поэтому значения идут от больших к меньшим.
Почему при обмене элементов нужна временная переменная?
Она сохраняет значение одного элемента, пока на его место записывают другой. Без неё первая запись может затереть значение, которое ещё не было перенесено.
Как понять, что массив уже отсортирован?
Проверьте каждую соседнюю пару по нужному условию. Для возрастания не должно быть пары, где левое значение больше правого, а для убывания — где левое меньше правого.
Что делать, если в массиве есть одинаковые элементы?
Одинаковые значения можно оставить рядом: при возрастании и убывании они не нарушают порядок. Сравнение должно учитывать направление сортировки, а элементы с равными значениями не требуется удалять.
§ 3. Упорядочение массивов