Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
LektsiiS.doc
Скачиваний:
88
Добавлен:
13.04.2015
Размер:
815.1 Кб
Скачать

4.3 Сравнение двух алгоритмов сортировки

Мы познакомились с двумя алгоритмами сортировки — обменной и слиянием. Каковы преимущества и недостатки каждого из них ?

Обменная сортировка, несомненно, проще. К тому же она не нуждается в дополнительной памяти — кроме сортируемого массива требуется лишь несколько переменных и их количество не зависит от объема сортируемых данных. Сортировка же слиянием требует удвоенного по сравнению с исходными данными объема памяти — для входных и для выходных массивов.

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

Пусть исходный массив состоит из n элементов. Обменная сортировка требует (n-1) просмотров массива. Первый просмотр охватывает массив целиком, второй — на 1 элемент меньше, третий — на два и т.д., в среднем просмотр затрагивает половину массива или n / 2 элементов. Время, затраченное на один просмотр, можно оценить как

.

Полное время обменной сортировки

.

Временные затраты алгоритмов имеет смысл обсуждать только для больших n, поэтому слагаемыми с младшими степенями n можно пренебречь.

Теперь проанализируем сортировку слиянием. Она тоже состоит из отдельных фаз, в которых входные массивы сливаются, и образуют выходные массивы. Время выполнения одной фазы можно оценить как

,

потому, что слияние требует однократного просмотра всех входных данных, а объем сливаемых данных от фазы к фазе не меняется и составляет ровно n элементов. Константа в формуле характеризует сложность алгоритма слияния и не зависит от n.

Остается оценить, сколько фаз нужно выполнить до полной сортировки массива. Первоначальная длина упорядоченных отрезков считается равной 1 и каждая фаза сортировки эту длину удваивает. Сколько нужно удвоений, чтобы довести длину отрезка от 1 до n, иными словами, какова должна быть степень числа 2, чтобы она превысила n ? Ответ — ближайшее сверху целое к двоичному логарифму от n. Итак, временная сложность сортировки слиянием

.

Чтобы лучше понять разницу между временной сложностью двух алгоритмов, обратимся к числам. Пусть на каком-то компьютере два разных алгоритма сортируют массив из 1 тыс. элементов за одинаковое время, например за 1 сек. Что будет, если задать для сортировки массив не из тысячи, а из 1 млн. элементов ? Легко посчитать, что время сортировки слиянием увеличится в 2000 раз и составит примерно 16 минут. Время же обменной сортировки увеличится в 1 млн. раз, что составит около 280 часов. После такого расчета не стоит и пытаться упорядочивать большие массивы алгоритмом обменной сортировки, но для маленьких массивов его применение оправдано.

Вопросы

1. Что нужно изменить в алгоритме обменной сортировки, чтобы первыми занимали свои места не большие числа, а маленькие ?

2. Улучшите алгоритм обменной сортировки так, чтобы работа прекращалась, если прохождение массива не вызвало ни одного обмена.

3. Для чего нужен оператор процедуры и как он выполняется ?

4. Разработайте алгоритм слияния массивов A и B с упорядоченными участками длины d.

5. Разработайте алгоритм слияния двух массивов с упорядоченными участками произвольной длины. Как определить конец упорядоченного участка?

6. Изменится ли временная сложность алгоритма слияния, если сливать не по два, а по три массива?

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]