У вас вопросы?
У нас ответы:) SamZan.net

он не устойчив; 2 на упорядоченных массивах его вычислительная сложность равна

Работа добавлена на сайт samzan.net:

Поможем написать учебную работу

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

Предоплата всего

от 25%

Подписываем

договор

Выберите тип работы:

Скидка 25% при заказе до 29.12.2024

30.

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

Базовый алгоритм быстрой сортировки был предложен Хоаром (C.A.R. Hoare) в 1960 году. Алгоритм популярен, потому что легко реализуется и эффективен для различных видов входных данных. Алгоритм относится к классу обменных сортировок. У него два основных недостатка:

  1.  1) он не устойчив;
  2.  2) на упорядоченных массивах его вычислительная сложность равна . 2()On

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

Базовый алгоритм сортировки действует по принципу “разделяй и властвуй”. Он делит массив на две части, а затем сортирует их независимо друг от друга. Суть метода заключается в процессе разбиения массива элементом key на два подмассива таким образом, что выполняются следующие условия:

  1.  1) элемент k(p) = key для некоторого p занимает свою окончательную позицию в массиве;
  2.  2) каждый из элементов k(0), …, k(p – 1) не превышает значения k(p);
  3.  3) каждый из элементов k(p + 1), …, k(n – 1) не меньше значения k(p).

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

алгоритма быстрой сортировки фрагмента массива k, содержащего n элементов типа T, с k(left) по k(right).

Листинг Базовый рекурсивный алгоритм быстрой сортировки

template <typename T>

void QuickSort(T * k, int left, int right) {

if (right <= left) return;

int i = left + 1, p = right;

T temp, x = k[left];

while (1) {

while (i < p && k[i] <= x) ++i;

while (p >= i && k[p] > x) --p;

if (i < p) {

temp = k[i];

k[i++] = k[p];

k[p--] = temp;

}

else break;

}

k[left] = k[p];

k[p] = x;

QuickSort(k, left, p - 1);

QuickSort(k, p + 1, right);

}

Пусть текущий сортируемый подмассив содержит элементы k(left), k(left + 1), …, k(right). Разбиение осуществляется с использованием следующей стратегии. Прежде всего, в качестве разделяющего элемента выбирается элемент левого конца массива x = k(left) и инициализируются переменные-индексы i = left + 1 и p = right. Далее начинается просмотр c левого конца массива (i увеличивается на единицу), который продолжается до тех пор, пока не будет найден элемент, превосходящий по значению разделяющий (x) (первое противоречие). Затем начинается просмотр с правого конца подмассива (p уменьшается на единицу) до тех пор, пока не отыщется элемент меньше разделяющего (второе противоречие). После чего значения элементов k(i) и k(p) меняются местами (разрешаются противо-речия) и индексы изменяются (i = i + 1 и p = p – 1). Когда i станет больше p, необходимо поменять местами значения элементов k(p) и k(left). В результате подмассив поделится на две части k(left), k(lef t+ 1), …, k(p – 1) и k(p + 1), k(p + 2), …, k(right), а рекурсивный процесс продолжится для этих подмассивов независимо друг от друга. Условием выхода из рекурсии является равенство единице длины сортируемого подмассива (left равно righ


Вычислительная сложность быстрой сортировки

Несмотря на все ценные качества, базовая программа быстрой сортировки обладает определенным недостатком: она исключительно неэффективна в некоторых случаях. Например, если она применяется для сортировки массива размером n, который уже упорядочен. После первого разбиения массив делится на подмассивы длиной 0 и n – 1. На следующем шаге образуются подмассивы длиной 0 и n – 2 и т.д. Будем полагать, что любой сортируемый подмассив содержит случайно упорядоченные записи с различными ключами. Оценка вычислительной сложности алгоритма в этом случае приведена в следующем утверждении.

Утверждение 1. Максимальная вычислительная сложность алгоритма быстрой сортировки равна O(n^2)

В случае сортировки упорядоченного массива глубина рекурсии характеризуется величиной O(n), что для больших объемов обрабатываемых данных недопустимо. Следует отметить, что имеются сравнительно простые способы существенного снижения вероятности возникновения такой ситуации.

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

сортировки, удовлетворяет рекуррентному соотношению

Amin(n)-2Amin(n/2)+n

Слагаемое 2Amin(n/2)  соответствует затратам на сортировку двух подфайлов, а n – затратам на сравнение элементов на первом шаге. Данное соотношение имеет решение Amin(n)=nlog2(n)

Однако разбиение массива на две равные части происходит далеко не всегда. Но можно показать, что среднее число операций сравнения, производимое в процессе работы алгоритма, также оценивается величиной ) O(nlogn)




1. Сыктывкарский гуманитарнопедагогический колледж имени И
2. Тема лекції Проблеми Української економіки пошук шляхів їх розв~язання.
3. 022012 Dr KrlGelbkeStr~e 8 08529 Pluen Berufliches Schulzentrum f~r Wirtschft und Gesundheit ldquo;nne Frnkldquo; Rei~iger Str~e 44 46 08525 Pluen
4. Контрольная работа- Право природопользования
5.  20 г Гражданин Российской Федерации и гражданка Российской Федерации
6. Хочу побывать в космосе
7. го векаrdquo; о менструации
8. ОТРУЄННЯ ЛІКАРСЬКИМИ РЕЧОВИНАМИ
9. ~аза~стан тарихы п~ні,максаты, міндеттері, деректері мен тарихнамасы
10.  Микрометр 2 Транспортир
11. Использование математических методов в психологии
12. Введение план этой книги Чтобы увидеть свой дом лучше всего остаться дома; но если это не удастся обойди.
13. Второе Кольцо силы ВВЕДЕНИЕ Летом 1960 года будучи студентом антропологии Калифорнийского универси
14. How to make your child gifted
15. Правовая защита интеллектуальной собственности- проблемы теории и практики Информационн
16. Валерий Харламов
17. Концепция проекта в проектном анализе
18. Тема выбирается студентом самостоятельно в соответствии с представленной таблицей
19. Введение3 Понятия виды и функции инвестиций
20. Схема вызова всех служб гоpода Куpгана