Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Архив1 / docx54 / Моя записка (2).docx
Скачиваний:
23
Добавлен:
01.08.2013
Размер:
242.54 Кб
Скачать

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 – выполнение программы.

Список использованных источников

  1. Кнут. Искусство программирования. Том 3.

  2. Окулов С. М. Программирование в алгоритмах, 2004

  3. С.В.Кухта Лекции по Структурам и Алгоритмам Обработки Данных.

16

Соседние файлы в папке docx54