Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Сортировка простым (фиксированным) двухпутевым слиянием.↑ ⇐ ПредыдущаяСтр 4 из 4 Содержание книги
Поиск на нашем сайте
В алгоритме Е границы между отрезками полностью определяются "ступеньками вниз". Такой подход обладает тем возможным преимуществом, что исходные файлы с преобладанием возрастающего или убывающего расположения элементов могут обрабатываться очень быстро, но при этом замедляется основной цикл вычислений. Вместо проверок ступенек вниз можно принудительно установить длину отрезков, считая, что все отрезки исходного файла имеют длину 1, после первого просмотра все отрезки (кроме, быть может, последнего) имеют длину 2, …, после kго просмотра имеют длину 2k. В отличие от "естественного" слияния в алгоритме Е такой способ называется простым (или фиксированным) двухпутевым слиянием.
Пример работы алгоритма Ф приведен на Рис. 6. Этот метод справедлив и тогда, когда N не является степенью 2, сливаемые отрезки не все имеют длину 2k. Проверки ступенек заменены уменьшением длины переменных q и r и проверкой на равенство нулю. Благодаря этому время асимптотически приближается к 11Nlоg2N, что несколько лучше, чем в предыдущем алгоритме. На практике имеет смысл комбинировать алгоритм Ф с простыми вставками; вместо первых четырех просмотров алгоритма Ф можно простыми вставками отсортировать группы, скажем из 16 элементов, исключив тем самым довольно расточительные вспомогательные операции, связанные со слиянием коротких файлов.
Рис. 6 Сортировак простым двухпутевым слиянием
Алгоритм Ф (Сортировка простым двухпутевым слиянием). При сортировке записей R1, …, RN используются две области памяти, каждая из которых может содержать N записей. Для удобства обозначим записи, находящиеся во второй области, через RN+1, …, R2N, хотя в действительности области не обязательно идти друг за другом. Начальное содержание второй области не имеет значение. После завершения алгоритма ключи будут упорядочены К1 £ …£ КN. (Начальная установка) Установить s:=0, (при s=0 мы будем пересылать записи из области (R1,…RN) в область (RN+1, …, R2N); при s=1 наоборот.) p:=1 (p – размер возрастающих отрезков, которые будут сливаться во время текущего просмотра; q и r – количества неслитых элементов в отрезках) (переменные i, j, k, g указывают текущие позиции во входных "файлах", откуда идет чтение, и в "выходных" файлах, куда идет запись) (Подготовиться к просмотру) Если s=0, то установить i:=1, j:=N, k:=N+1, g:=2N, если s=1, то установить i:=N+1, j:=2N, k:=1, g:=N. Затем установить d:=1, q:=p, r:=p. (Сравнения Кi с Кj) Если Кi > Кj, то перейти к шагу Ф8. (Пересылка Ri) Установить k:=k+d, Rk:=Ri. (Конец отрезка?) Установить i:=i+1, q:=q–1. Если q > 0, то возвратиться к шагу Ф3. (Пересылка Rj) Установить k:=k+d. Если k=g, то перейти к шагу Ф13; в противном случае установитьRk:=Rj. (Конец отрезка?) Установить j:=j–1, r:=r–1. Если r > 0, то возвратиться к шагу Ф6; в противном случае перейти к шагу Ф12. (Пересылка Rj) Установить k:=k+d, Rk:=Rj. (Конец отрезка?) Установить j:=j–1, r:=r–1. Если r > 0, то возвратиться к шагу Ф3. (Пересылка Ri) Установить k:=k+d, Если k=g, то перейти к шагу Ф13; в противном случае установить Rk:=Ri. (Конец отрезка?) Установить i:=i+1, q:=q–1. Если q > 0, то возвратиться к шагу Ф10 (Переключение направления) Установить q:=p, r:=p, d:= –d и взаимозаменить k:=g. Возвратиться к шагу Ф3. (Переключение областей) Установить p:=p+p. Если p < N, то установить s:=1 – s и возвратиться к шагу Ф2. В противном случае сортировка завершена; Если s=0, то установить (R1,…RN):= (RN+1, …, R2N). (Независимо от распределения исходного файла последнее копирование будет выполнено тогда и только тогда, когда значение round(log2N) нечетно. Так что можно заранее предсказать положение отсортированного файла, и копирование, как правило, не требуется).
|
|||||
Последнее изменение этой страницы: 2017-01-18; просмотров: 759; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.142.131.51 (0.005 с.) |