Меню

Главная

Статистика

 

 


Упражнение #4.

Смоделируйте пример исходного массива длины N=10, иллюстрирующий описанную ситуацию, когда на каждой итерации отделяется подмассив с единственной компонентой.

Подобные "мелкие неприятности" вызвали появление ряда модификаций алгоритма быстрой сортировки, в основном связанных с тактикой выбора барьера на очередной итерации, а также с ограничением длины интервала снизу.

Именно снизу, поскольку с уменьшением мощности подмассива начинают все в большей степени сказываться значения коэффициентов, "растворившихся" в асимптотических оценках трудоемкости. Иначе говоря, на "коротких" векторах реальное время работы квадратичных сортировок оказывается меньшим, чем при выполнении QuickSort. Какое число N скрывает качественная оценка "короткий", зависит и от деталей реализации алгоритма, и от аппаратных характеристик компьютера.

Одно из популярных решений состоит в том, чтобы останавливать рекурсивные вызовы процедуры, как только длина подмассива уменьшается не до 1, а до некоторого натурального M>1. Эту идею выдвинул Седжвик (Robert Sedgewick, 1978), предложив и дальнейшую стратегию устранения остающихся беспорядков, которые присутствуют в неупорядоченных M-подмассивах, возникших на месте исходного вектора. Собственно механизм заключается в том, что вектор, уже разделенный на такие подмассивы, подвергается заключительной обработке с помощью алгоритма сортировки простыми вставками. Эту разновидность обширного семейства сортировок мы обсудим ниже.

Упражнение #5.

Напишите процедуру QuickSort2, разделяющую входной вектор на подмассивы длиной не больше заданного значения M, которое также передается в качестве входного параметра.


Задача #1. Анти-QuickSort
Имя входного файла input.txt
Имя выходного файла output.txt
Максимальное время работы на одном тесте 2 секунды

На входе программы числовой массив заданной длины N. Переставить его элементы таким образом, чтобы выходной массив имел вид, наименее пригодный для работы алгоритма QuickSort, а именно, на каждой итерации разделения появлялся бы подмассив единичной длины.

Формат входных данных

В первой строке входного файла находится число N (1<=N<=1000), затем следуют N элементов массива, все значения которого различны и лежат в интервале -32768..32767.

Формат выходных данных

Выходной файл должен содержать требуемую перестановку. Если таких перестановок существует более одной, то достаточно вывести любую из них.

Пример входного файла Пример выходного файла
4
10 -7 8 5
8 -7 5 10

Назад