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

110 Глава 3. Множества, связанные списки и рекурсия

Алгоритм InsertionSort (A):

Вход: множество n сопоставимой Продукции элементов: множество с элементами, перестроенными в неуменьшающемся заказе

поскольку я¬ 1 к n- 1 делаю

Вставляют [я] в его надлежащем местоположении в [0], [1]..., [я- 1]злая собака¬ [я] j¬ i-1, в то время как j³ 0 и [j]> злая собака делают

[j + 1]¬ [j] j¬ j-1

[j + 1]¬ злая собаказлая собака находится теперь в правильном месте

Кодовый Фрагмент 3.7: Алгоритмическое описание алгоритма вида вставки.

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

Мы представляем C ++ кодекс для нашего алгоритма вида вставки в Кодовом Фрагменте 3.8. Мы предполагаем, что множество, которое будет сортировано, состоит из элементов случайной работы типа, но легко обобщить это к другим типам данных. Множество в алгоритме осуществлено как множество случайной работы. Вспомните, что каждое множество в C ++ представлено как указатель на его первый элемент, таким образом, параметр A, как объявляют, имеет тип char*. Мы также передаем размер множества в параметре целого числа n. Остальное - прямой перевод описания, данного в Кодовом Фрагменте 3.7 в C ++ синтаксис.

пустота insertionSort (случайная работа* A, интервал n)

для (интервал i = 1; я <n; я ++)

злая собака случайной работы = [я];

интервал j = я- 1;

в то время как ((j> = 0) && ([j]> злая собака))

[j + 1] = [j];

j-;

// // // // // // //

сортируйте множество n текущего характера петли вставки знаков, чтобы вставить начало в предыдущем характере, в то время как [j] не работает движение [j] правильный декремент j

[j + 1] = злая собака;

//это - надлежащее место для злой собаки

Кодовый Фрагмент 3.8: C ++ кодекс, осуществляющий алгоритм вида вставки.

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

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

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

3.1.3 Двумерные множества и позиционные игры

Много компьютерных игр, быть ими стратегические игры, игры моделирования, или первоклассные conflict игры, используют двумерное «правление». Для программ, которые имеют дело с таким почтовым - sitional игры, нужен способ представлять объекты в двумерном пространстве. Естественный способ сделать это с двумерным множеством, где мы используем два индекса, говорим меня и j, чтобы относиться к клеткам во множестве. Первый индекс обычно относится к номеру ряда и второму к числу колонки. Учитывая такое множество мы можем тогда главный - оловянная амальгама двумерные игровые доски, а также выполнять другие виды вычислений