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

27,28,29.Сортировка в языке Паскаль.

Под сортировкой понимают процесс перестановки объектов данного множества в определённом порядке. Цель: облегчить последовательный поиск элементов в сортированном множестве.

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

  2. Сортировка файлов.

Эти две категории называют внутренней и внешней. Массивы располагаются во внутренней оперативной памяти ЭВМ, которые характеризуются быстродействием, но малым объёмом, а файлы хранятся в более медленных, но более вместительной памяти на дисках.

Пусть даны элементы А1,А2,Аn. Сортировка означает перестановку этих элемнетов в таком порядке Ак1, Ак2, .. , Акн, что при заданной функции упорядочивания Ф(Ак1),Ф(Ак2),..,Ф(Акн).

Обычно функция упорядочивания не вычисляется по какому то специальному файлу, а содержится в каждом элементе в виде явной компоненты поля. Ее значение называется ключом элемента, а само поле ключевым, следовательно для представления элемента А хорошо подходит структура данных типа Запись.

Type

Item=record

Key:integer;

Data:t_date;

Поле дата –все существенные данные об элементе, поле кей – ключ который служит для идентификации элементов.

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

Основное требование к методу сортировки – экономное использование памяти, это значит, что переупорядочивание элементов надо производить в исходном массиве. Метод сортировки можно разбить на 3 основных класса, в зависимости о лежащего в их основе приёма.

  1. сортировка вставок

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

  3. сортировка обменом (пузырёк)

27. Сортировка Обменом (пузырёк).

Основан на том, что более «лёгкие» элементы массива постепенно «всплывают» , то есть переносятся к началу массива. Происходит сравнение и обмен соседних элементов попарно, пока не будут отсортированы все элементы.

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

  1. Сначала сравниваются 2 последних элемента массива (последний и предпоследний). Если последний элемент меньше чем предпоследний, то происходит обмен значениями этих элементов.

  2. Дальше сравнивается 2-й и 3-й с конца элементы массива и если элемент расположенный ниже меньше, то он меняется местами со своим верхним соседом.

  3. И т.д. до начала массива. В результате чего на 1-м месте окажется элемент массива с наименьшим значением.

  4. Далее процесс по парного сравнения продолжается от конца массива уже до 2-го элемнта массива, т.к. 1-й элемент уже упорядочен. В результате на 2-м месте окажется элемент, значение которого меньше значения 1-го элемента.

  5. И т.д. пока все элементы не будут упорядочены.

Главное достоинство – простота.

Наиболее серьёзным недостатком является быстрое замедление, когда кол-во элементов становиться большим.

Во многих случаях показано, что последние несколько проходов не влияют на порядок, т.к. они уже отсортированы(цикл работает впустую.

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

Program bubble_sort;

Const n=10;

Type vector=array[1..10] of real;

Var

Vec:vector;

Temp:real;

I,j:integer;

Begin

{vvod vec}

For i:=2 to n do

Begin

For j:=n downto I do

Begin

If vec[j]<vec[i]

Then

Begin

Temp:=vec[j-1];

Vec[j-1]:=vec[j];

Vec[j]:=temp;

End;

End;

End;

{pechat}

End.

Асимметрия метода.

Один лёгкий пузырь в тяжёлом конце отсортированного массива выплывает на место за 1 проход, а тяжёлый элемент в лёгком конце будет опускать на правильное место только на 1 шаг на каждом проходе, потом первый массив будет упорядочен за 1 шаг , а второй потребует больше проходов.

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

Сортировка обменом и её небольшие улучшения хуже, чем сортировка выбором и вставок. Их выгодно использовать, когда известно, что элементы упорядочены (но это очень редко).

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