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

Лабораторная работа № 4. Сортировка массивов

Цель занятия – ознакомление и приобретение навыков реализации алгоритмов сортировки массивов на языке C++.

1. Общие сведения

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

Разговор о сортировке вполне уместен и важен, если речь идет об обработке данных. Кроме того, сортировка – это идеальный объект для демонстрации огромного разнообразия алгоритмов, все они изобретены для одной и той же задачи, многие в некотором смысле оптимальны, большинство имеет свои достоинства. На примерах сортировок можно показать, как путем усложнения алгоритма можно добиться значительного выигрыша в эффективности. Изложение алгоритмов сортировки с анализом их эффективности дано в [1,2]. В [3] приводится классификация известных методов сортировки.

При рассмотрении задачи сортировки, следуя [2] будем считать, что группа данных, которую нужно упорядочить, фиксирована, т.е. множество из n элементов задано в виде массива a[n]. Если у нас есть элементы a1,a2,...,an, то сортировка есть перестановка этих элементов в массив , где при некоторой упорядочивающей функции f выполняются отношения . Обычно упорядочивающая функция не вычисляется по какому-либо правилу, а хранится как явная компонента (поле) каждого элемента. Ее значение называется ключом (key) элемента. Поэтому для представления элементов выбирается тип данных – структура, которую можно определить следующим образом:

struct Item {

int key;

/* здесь описаны другие компоненты */

};

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

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

2. Методы сортировки

Основное условие: выбранный метод сортировки массивов должен экономно использовать доступную память. Это предполагает, что перестановки, приводящие элементы в порядок, должны выполняться на том же месте, т.е. методы, в которых элементы из массива a передаются в результирующий массив b, представляют существенно меньший интерес. Хорошей мерой эффективности может быть C - число необходимых сравнений ключей и M - число пересылок (перестановок) элементов.

Методы сортировки "на том же месте" можно разбить в соответствии с определяющими их принципами на три основные категории [2]:

  • сортировки с помощью вставки;

  • сортировки с помощью выбора;

  • сортировки с помощью обмена.

Рассмотрим эти методы. Все программы оперируют переменной a, именно здесь хранятся переставляемые элементы в виде массива структур Item:

Item a[n];

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