Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
6.doc
Скачиваний:
3
Добавлен:
01.05.2025
Размер:
220.16 Кб
Скачать

6.2. Сортировка массивов

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

В программировании под сортировкой обычно понимают процесс размещения элементов заданного множества объектов в некотором определенном порядке, как правило, в порядке возрастания или убывания.

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

Очевидно, что такое размещение необходимо потому, что с отсортированными данными работать легче, чем с произвольно расположенными. Когда элементы отсортированы, их проще найти (как в телефонном справочнике или в словаре), проще производить с ними различные операции. В отсортированных данных легче определить, имеются ли пропущенные элементы; найти общие элементы двух множеств, если оба они отсортированы. Сортировка также является мощным средством ускорения работы практически любого алгоритма, в котором часто нужно обращаться к определенным элементам. Но, как пишет один из классиков теории программирования Д. Кнут, "даже если бы сортировка была дочти бесполезна, нашлась бы масса причин заняться ею! Изобретательные методы сортировки говорят о том, что она и сама по себе интересна как объект исследования". Анализ этих методов очень полезен и с точки зрения обучения, так как с их помощью можно наглядно проиллюстрировать самые разные приемы программирования. По словам создателя языка Паскаль, Н. Вирта, "создается впечатление, что можно построить целый курс программирования, выбирая примеры только из задач сортировки".

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

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

  • количество сравнений;

  • количество присваиваний.

Все методы сортировки можно разделить на две большие группы:

  • прямые методы сортировки

  • улучшенные методы сортировки.

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

  1. сортировка выбором;

  2. сортировка обменом;

  3. сортировка вставками.

6.2.1. Алгоритм сортировки выбором элемента

Сортировка выбором элемента - это наиболее привычный и в то же время не самый худший способ решения задачи.

Теория метода:

В массиве нужно найти элемент с минимальным значением на интервале от 1–го элемента до n-го (последнего) и поменять его местами с первым элементом массива (для сортировки по убыванию - это нужно сделать с максимальным элементом!). После этого элемент с минимальным значением отыскивается среди всех элементов, кроме первого, и меняется значениями со вторым элементом массива и т.д. В результате все элементы выстраиваются по порядку.

Рассмотрим этот процесс на примере. Пусть исходный массив M состоит из 6 элементов и имеет вид:

5 9 3 6 1 4

После сортировки массив должен выглядеть так:

1 3 4 5 6 9

Процесс сортировки представлен ниже. Жирным выделена отсортированная часть массива.

Шаг 1. Рассмотрим весь массив и найдем в нем минимальный элемент — 1, поменяем его местами с первым элементом — с 5.

5 9 3 6 1 4

Минимальный элемент записан на 1-е место

1 9 3 6 5 4

Шаг 2. Рассмотрим часть массива — со второго по шестой элемент. Минимальный элемент этой части — 3. Поменяем его местами со вторым элементом — с 9 (первый элемент в неотсортированной части массива).

1 9 3 6 5 4

Отсортированная часть массива состоит теперь уже из двух элементов.

1 3 9 6 5 4

Шаг 3. Снова уменьшим рассматриваемую часть массива на один элемент. Здесь нужно поменять местами минимальный элемент этой части — 4 и третий элемент (его значение — 9)

1 3 9 6 5 4

В отсортированной части массива — 3 элемента.

1 3 4 6 5 9

Шаг 4. Аналогично.

1 3 4 6 5 9

1 3 4 5 6 9

Шаг 5. Минимальный элемент одновременно является первым в неотсортированной части массива, поэтому его нужно оставить на старом месте.

1 3 4 5 6 9

1 3 4 5 6 9

Шаг 6. Далее действуем аналогично шагу 5.

1 3 4 5 6  9

Итог: 1 3 4 5 6 9

Одна из возможных версий программы, реализующей алгоритм сортировки выбором, представлена на языке программирования Паскаль в следующем виде:

Program SeIectiоn_Sort;

uses Сrt;

const n=10; {длина массива}

type

Mas = array [1..n] of real;

var

M:mas;

min: real ; { мин.элемент в массиве}

N_min: integer; {номер мин.элемента }

i,j: intеgеr; {счетчики }

begin

СlrSсr ;

Writeln('введите элементы массива');

for i: = 1 to n do Read(M[i]);

Readln;

{начало сортировки}

for i: = 1 to n-1 do

begin

{поиск минимального элемента в интервале oт i до n}

min := M[i];

N_min := i ;

for j: = i+1 to n do

if M[j]<min then

begin

min := M[j];

N_min := j

end;

{обмен местами мин. и i элементов}

М[N_min] := М[i];

M[i] :=min;

end;

{печать отсортированного массива}

for i : = 1 to n do

Write(M[ i ]:8:2);

Writeln

end .

Данный алгоритм имеет общую оценку трудоемкости на уровне O(n2). По сравнению с алгоритмами вставки и “пузырька” он обеспечивает существенно меньшее количество перемещений элементов (обменов) и в большинстве случаев может оказаться более быстрым, чем они. Для учащихся, испытывающих затруднения с программированием более сложных и громоздких алгоритмов, метод можно рекомендовать в качестве учебного.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]