Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Data Structures and Algorithms in C++ 2e (На ру...docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
2.37 Mб
Скачать

3.1. Используя множества 109

Операция по удалению включает несколько тонких моментов. Чтобы возвратить стоимость

из удаленного входа игры (позволяют нам назвать его e), мы должны сначала спасти e во временном служащем, vari-способный. Когда мы будем сделаны, функция возвратит эту стоимость. Процесс перемены начинается в положении только после удаления, j = я + 1. Мы неоднократно копируем

вход в индексе j к индексу j - 1, и затем увеличивает j до прибытия в последний ele-

ment набора. Подобный случаю вставки, это слева направо заказывает, важно

избегать переписывать существующие записи. Чтобы закончить функцию, мы возвращаем копию из удаленного входа, который был спасен в e.

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

3.1.2 Сортировка множества

В предыдущем подразделе мы упорно работали, чтобы показать, как мы можем добавить или удалить

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

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

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

Легко видеть, почему этот алгоритм называют «видом вставки» - каждое повторение алгоритма вставляет следующий элемент в сортированную часть тока множества, которое было ранее подмножеством перед тем элементом. Мы можем осуществить вышеупомянутую схему, используя две вложенных петли. Внешняя петля рассматривает каждый элемент во множестве в свою очередь и внутренние шаги петли, что элемент к его надлежащему местоположению с (сортированным) подмножеством элементов, которые являются с его левой стороны от него. Мы иллюстрируем получающийся алгоритм в Кодовом Фрагменте 3.7.

Это описание уже вполне близко к фактическому C ++ кодекс. Это указывает который