- •Содержание
- •1 Задача №1.46
- •1.1 Постановка задачи и ее анализ
- •1.2 Описание структур данных
- •1.3 Проектирование программы
- •1.4 Результаты тестирования
- •2.4 Результаты тестирования
- •3.4 Результаты тестирования
- •4 Задача 4.7
- •4.1 Постановка задачи и ее анализ
- •4.2 Описание алгоритма
- •4.3 Проектирование программы
- •4.4 Результаты тестирования
- •Список использованных источников
3.4 Результаты тестирования
Сначала пользователь вводит количество элементов дерева, затем сами элементы. После считаем среднее арифметическое дерева и выводим результат на экран.
4 Задача 4.7
4.1 Постановка задачи и ее анализ
Параллельная сортировка Бэтчера.
4.2 Описание алгоритма
Суть сортировки заключается в следующем: Выбирается начальный интервал сравнения пар h. Устанавливаются вспомогательные переменные , r=0, z=h для первого прохода.
Выполняется сравнение и обмен элементов для всех i, таких, что 0<=i<N-z и i&h=r, а также i+1 и i+z+1.
К этому моменту z - нечетное, кратное h, то есть z/h - нечетное число, а h - степень двойки, следовательно i&h<>(i+z)&h, значит, сравнение и обмен можно выполнять при всех нужных значениях i в любом порядке или даже одновременно. В связи с этим сортировка и названа параллельной.
Затем изменяются значения вспомогательных переменных z=q-h, q=q/2, r=h и процесс продолжается, пока q>=h.
К этому моменту исходный массив будет упорядочен с шагом h.
Затем h уменьшается в два раза h=h/2 (с учетом целого типа) и процесс продолжается, пока h>0(1. Кнут. Искусство программирования).
Рассмотрим данный алгоритм сортировки на примере одномерного массива.
4.3 Проектирование программы
Реализуем данную задачу следующим образом: Для реализации данной программы выберем язык С (Pelles C). Массив будет иметь 16 значений, каждое из которых будет задаваться случайно. Рассмотрим функцию сортировки:
Данная функция полностью соответствует алгоритму сортировки.
Листинг функции:
void BatcherSort()
{
unsigned p = N;
while (p > 0)
{
unsigned q = N, r = 0, d = p;
int b;
do
{
unsigned nTo = N - d;
for (unsigned i = 0; i < nTo; i++)
if ((i & p) == r)
{
if (Arr[i] > Arr[i + d])
{
int temp = Arr[i];
Arr[i] = Arr[i + d];
Arr[i + d] = temp;
}
}
b = q != p;
if (b)
{
d = q - p;
q >>= 1;
r = p;
}
}
while (b);
p >>= 1;
}
}
4.4 Результаты тестирования
Результатом сортировки является отсортированный массив. Вначале массив заполняется случайными числами, а после мы видим уже отсортированный массив. Выполнение программы представлено на рисунке 5.
Рисунок 5 – выполнение программы.
Список использованных источников
Кнут. Искусство программирования. Том 3.
Окулов С. М. Программирование в алгоритмах, 2004
С.В.Кухта Лекции по Структурам и Алгоритмам Обработки Данных.