4879

Сравнение эффективности алгоритмов сортировки

Лекция

Информатика, кибернетика и программирование

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

Русский

2012-11-28

47.5 KB

43 чел.

Сравнение эффективности алгоритмов сортировки.

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

  •  скорость работы алгоритма, оцениваемая как суммарное необходимое количество «элементарных» операций. Часто в качестве такой элементарной операции выступает операция сравнения элементов последовательности. Заметим, что скорость работы может существенно зависеть от контекста, в котором выполняется алгоритм (аппаратное окружение, особенности входных данных и т.п.), в связи с чем может оказаться, что более важно оценивать, например, количество операций обмена элементов. Таким образом, выбор этого критерия определяется конкретными практическими соображениями, связанными с областью применения алгоритма. При этом часто важными являются оценки как в «предельных» случаях (т.е. в «лучшем» и «худшем»), так и «в среднем».
  •  необходимое количество памяти, требуемое для работы алгоритма. В этом смысле наиболее эффективны алгоритмы, не требующие выделения дополнительной памяти, такие алгоритмы часто называют сортировками на месте.
  •  зависимость от структуры исходных данных, например, поведение алгоритма для частично упорядоченных последовательностей, требование каких-либо особенностей входной последовательности и т.д.
  •  необходимость в рекурсивной реализации, может быть существенным фактором в условиях ограничений на доступную глубину стека вызовов.
  •  простота реализации, зачастую определяет выбор алгоритма в условиях ограниченного времени на разработку, отладку и тестирование алгоритма.

Оценки рассмотренных алгоритмов приведены в таблице:

Алгоритм

Вычислительная сложность

Требуемое количество памяти

В лучшем случае

В среднем

В худшем случае

«Пузырьковая» сортировка

O(N)

O(N2)

O(N2)

O(1)

Сортировка вставками

O(N)

O(N2)

O(N2)

O(1)

Сортировка выбором

O(N2)

O(N2)

O(N2)

O(1)

Сортировка Шелла

O(N)

O(N3/2)

O(N3/2)

O(1)

Быстрая сортировка

O(N logN)

O(N logN)

O(N2)

O(logN)

Пирамидальная сортировка

O(N logN)

O(N logN)

O(N logN)

O(1)

Сортировка слиянием

O(N logN)

O(N logN)

O(N logN)

O(N)

Для оценки фактического времени работы алгоритмов можно воспользоваться частью стандартной библиотеки (time.h), предоставляющей функции работы с системным таймером:

#include <iostream>

#include <time.h>

void main(int argc, char* argv[])

{

  // Синоним для типа данных "указатель на функцию"

  typedef void ( * t_SortFuncPrt )( double *, int );

  const int N_ALG = 7; // Число тестируемых алгоритмов

  // Массив указателей на все тестируемые функции сортировки

  t_SortFuncPrt sortAlgorithms[ N_ALG ] = { bubbleSort, insertSort, selectSort, shellSort, quickSort, heapSort, mergeSort };

  // Размер тестовой последовательности

  const int N = 10000;

  // Тестовые последовательности

  double * A[ N_ALG ];

  // Выделяем память

  for ( int i = 0; i < N_ALG; ++i )

     A[ i ] = new double[ N ];

  for ( int i = 0; i < N; ++i )

  {

     // Генерируем случайное число [0~1)

 double value = static_cast< double >( rand() ) / RAND_MAX;

     // Заполняем все тестовые последовательности одинаково

     for ( int j = 0; j < N_ALG; j++ )

        A[j][i] = value;

  }

 

  // Для каждого алгоритма

  for ( int i = 0; i < N_ALG; i++ )

  {

     // Засекаем текущее время

     clock_t before = clock();

     // Запускаем алгоритм

     sortAlgorithms[i]( A[i], N );

     // Засекаем время

     clock_t after = clock();

     // Общее время работы (мсек)

     clock_t totalTime = after - before;

     cout << "Algorithm " << i << ": " << totalTime << endl;

  }

  // Освобождаем память

  for ( int i = 0; i < N_ALG; ++i )

     delete[] A[ i ];

}


 

А также другие работы, которые могут Вас заинтересовать

4795. Операторы управления языка Паскаль 89.5 KB
  Операторы управления ЯП Операторы выбора: типы, синтаксис и семантика. Выбирающие операторы ЯП Паскаль. Техника программирования ветвлений. Операторы повторения: типы, синтаксис и семантика. Техника программирования циклов...
4796. Структурные типы данных 98 KB
  Структурные типы данных Статические типы данных: Регулярный тип данных. Массивы. Одномерные массивы. Селекторные изменения. Многомерные массивы и общие типы индексов. Динамические и гибкие массивы. Строки. Комбинированный тип данных. Записи. Раздел ...
4797. Множественный тип данных. Множества 67 KB
  Множественный тип данных. Множества. Конечные множества как вычислительные структуры. Предварительное распределение памяти и контроль типов. Ввод/вывод и внешние вычислительные структуры. Файловый тип данных. Последовательные файлы. Файлы прямого до...
4798. Техника описания ветвящихся алгоритмов и другие работы по алгоритмизации в программировании 142.5 KB
  Техника описания ветвящихся алгоритмов Ход занятия. Задачи на взвешивания Задача. Упорядочение по весу 4-х предметов. Даны предметы A, B, C, D , весящие соответственно pA, pB, pC, pD гр. Описать алгоритм упорядочения этих предметов по весу. Поняти...
4799. БУХГАЛТЕРСКИЙ УЧЕТ В СТРАХОВЫХ ОРГАНИЗАЦИЯХ 1.55 MB
  В учебном пособии раскрываются особенности организации бухгалтерского учета в страховании, формирования себестоимости страховых услуг и конечного финансового результата, страховых резервов и фондов, а также составления отчетности. Особое внимание уд...
4801. Устройство ЛАДА 2110 (ВАЗ 2110) 10.47 MB
  Устройство ЛАДА 2110 (ВАЗ 2110) ВАЗ-2110, -2111, -2112 и их модификации - пятиместные легковые автомобили с передним расположением двигателя. Кузов - несущей конструкции, цельнометаллический, сварной. Тип кузова: ВАЗ-2110 - седан, ВАЗ-2111 универсал...
4802. Управление активами и пассивами 108.5 KB
  Управление активами и пассивами Сущность и подходы к управлению активами и пассивами в коммерческом банке Типы управления активами и пассивами. Процесс управления активами и пассивами Вопрос 1. Сущность, цели и методы управления активами...
4803. Структурная схема системы связи, предназначенной для передачи данных и передачи аналоговых сигналов методом ИКМ 269 KB
  Разработать структурную схему системы связи, предназначенной для передачи данных и передачи аналоговых сигналов методом ИКМ для заданного вида модуляции и способа приема сигналов. Рассчитать основные параметры системы связи. Указать и обосновать пут...