Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Алгоритмы_данные_ЗО_2015.doc
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
279 Кб
Скачать
☆

Базовые алгоритмы обработки данных

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

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

  2. Алгоритмы обработки строк, которые включают в себя ряд методов обработки длинных последовательностей символов. Наиболее распространенными являются задачи поиска подстроки в строке.

  3. Алгоритмы сортировки, предназначенные для упорядочения массивов и файлов. К ним относятся задачи упорядочения слов (списков, строк) по алфавиту, любых сложных типов по значениям ключей и т.д.

  4. Алгоритмы на деревьях, которые используются при решении ряда важных задач. Одной из основных задач является поиск и сортировка на двоичных и В - деревьях. Эти структуры позволяют существенно упростить решение таких задач.

Тема 2.2. Алгоритмы обработки данных линейной структуры

3. Алгоритмы сортировки

3.1. Основные определения и классы алгоритмов

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

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

    1. Наиболее распространенные простые алгоритмы внутренней сортировки (массивов)

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

a[0], a[1], a[2], … a[n-1].

Их можно разделить на три основные категории алгоритмов сортировки:

  1. вставками;

  2. выбором;

  3. обменом

  4. Шелла.

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

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

Словесное описание алгоритма можно представить так.

Алгоритм простой сортировки вставками

  1. Задать исходный массив А из n элементов.

  2. Для i от 0 до n

    1. Индекс элемента в конце массива j = i

    2. Пока (j > 0) И (Аj-1 > Ai)

      1. Сдвиг большего элемента, чтобы было место для вставки

Аj = Аj-1

      1. j = j - 1

    1. Вставка j - го элемента на его место

Аj = Ai

  1. Вывести массив А.

Число сравнений и пересылок в худшем случае пропорционально n2, т.е. сложность алгоритма равна О(n2).

Время сортировки можно сократить, если учесть, что начальная часть массива (до индекса j) упорядочена. При этом точку вставки можно найти методом деления пополам диапазона индексов этой части (от 0 до j).

Алгоритм сортировки двоичными вставками

  1. Задать исходный массив А из n элементов.

  2. Для i от 0 до n

    1. Вставляемый элемент х = Ai

    2. Левая граница диапазона L = 0.

    3. Правая граница диапазона R =i.

    4. Пока (L<R)

      1. Искомый индекс m = (L + R)/2

      2. Если Am ≤ x

L = m + 1

Иначе

R = m.

    1. Перепись элементов на одну позицию в конец массива (освобождение места для вставки)

Для j от i до R + 1 с шагом -1

Аj = Аj-1

    1. Вставка последнего элемента

АR= x

  1. Вывести массив А.

Число сравнений и пересылок рассмотренным методом в худшем случае пропорционально n*log(n), т.е. сложность алгоритма равна О(n*log(n)).