Изменения

Перейти к: навигация, поиск

PSRS-сортировка

124 байта добавлено, 01:58, 12 июня 2014
Алгоритм
== Алгоритм ==
На вход подаётся * Начало* '''Шаг 1''' Исходный массив в <tex>n</tex> элементов. Для начала надо разделить входные данные на <tex>p</tex> равных частей, где разделим поровну между <tex>p</tex> {{---}} количество процессоровпроцессорами. Далее запустить алгоритм быстрой сортировки на * '''Шаг 2''' На каждом из процессоровпроцессоре запускам [[Быстрая сортировка|быструю сортировку]]. Следующим шагом мы должны сформировать * '''Шаг 3''' Формируем вспомогательный массив элементами которого будут элементы из элементов каждого процессора с под индексами <tex dpi=145>0,\frac {n} {p^2}, \frac {2n}{p^2},...,\frac {(p-1)n}{p^2}</tex>. Теперь нам потребуется отсортировать полученный * '''Шаг 4''' Сортируем вспомогательный массив и выбрать с помощью быстрой сортировки.* '''Шаг 5''' Формируем массив разделителей из него <tex>p</tex> разделителей с элементов вспомогательного массива под индексами <tex dpi=145> p + [\frac {p} {2}] - 1, 2p + [\frac {p}{2}] - 1,...,(p-1)p + [\frac {p}{2}] - 1</tex>. После чего разделим * '''Шаг 6''' Делим данные в процессорах согласно полученному массиву с помощью массива разделителейследующим образом. Пусть <tex>a_1, a_2,..., a_j</tex> {{---}} разделители. Разделение происходит следующим образом, Тогда данные в каждом процессоре разобьём на группы элементов, попадающие в соответствующие полуинтервалы <tex>(-\infty,a_1],(a_1,a_2],...,(a_j,+\infty)</tex>. Далее сольём * '''Шаг 7''' Сливаем соответствующие группы, которые отсортированы по возрастанию, элементов в массивы. Слияние будем производить поочерёдно, то есть сначала сольём первую группу со второй потом результат с третей и так далее. В итоге получим отсортированный набор данных.* '''Шаг 8''' данные из процессоров поочерёдно записываем в исходный массив. Данные отсортированы.* Конец
== Пример ==
77
правок

Навигация