Обсуждение:PSRS-сортировка
Версия от 17:50, 9 июня 2014; AlexeyL (обсуждение | вклад)
Распараллеливание простых сортировок
Параллельная сортировка пузырьком
Сначала главный процессор разбивает исходный массив длиной
элементов на равных частей блоков. Каждый блок содержит элементов массива. Полученные блоки рассылаются по процессам. Далее идет предобработка. На этапе предобработки каждый процесс сортирует свой массив методом пузырьковой сортировки. Далее происходит чередование чет-нечетных перестановок на p итерациях. На нечетной итерации пары процессов с номерами обмениваются друг с другом массивами, при этом выполняется слияние блоков, после чего на процессе с меньшим номером остается первых упорядоченных элементов объединенного массива, а на процессе с большим номером остается последних упорядоченных элементов объединенного массива. На четной итерации происходит все точно так же, но обмен производится между процессами с номерами . Если в течении двух последовательных четной и нечетной итерации не производится никаких изменений, то алгоритм может прекратить свою работу заранее. После этого части массивов отсылаются на главный процесс и там объединяются, после чего получается отсортированный массив. Предобработка занимет тактов после чего происходит максимум слияний. Осознать, что максимально количество слияний можно, представив частный случай. Пусть минимальный элемент оказался в последнем блоке тогда за за каждое слияние он будет перемещаться на один блок влево. После слияний он окажется в первом блоке. В итоге время сортировки сократится с до .