Учебники

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

Используется по принципу «разделяй и властвуй». Быстрая сортировка — это алгоритм выбора во многих ситуациях, поскольку его нетрудно реализовать. Это хороший вид общего назначения, и он потребляет относительно меньше ресурсов во время выполнения.

преимущества

  • Он на месте, поскольку использует только небольшой вспомогательный стек.

  • Для сортировки n элементов требуется только n (log n) времени.

  • У него очень короткая внутренняя петля.

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

Он на месте, поскольку использует только небольшой вспомогательный стек.

Для сортировки n элементов требуется только n (log n) времени.

У него очень короткая внутренняя петля.

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

Недостатки

  • Это рекурсивно. Особенно, если рекурсия недоступна, реализация чрезвычайно сложна.

  • Это требует квадратичного (т.е. n2) времени в худшем случае.

  • Он хрупок, то есть простая ошибка в реализации может остаться незамеченной и привести к ее плохой работе.

Это рекурсивно. Особенно, если рекурсия недоступна, реализация чрезвычайно сложна.

Это требует квадратичного (т.е. n2) времени в худшем случае.

Он хрупок, то есть простая ошибка в реализации может остаться незамеченной и привести к ее плохой работе.

Быстрая сортировка работает путем разбиения заданного массива A [p … r] на два непустых подмассива A [p … q] и A [q + 1 … r] так , чтобы каждый ключ в A [p … q] меньше или равно каждому ключу в A [q + 1 … r] .

Затем два подмассива сортируются рекурсивными вызовами быстрой сортировки. Точная позиция раздела зависит от заданного массива, и индекс q вычисляется как часть процедуры разделения.

Algorithm: Quick-Sort (A, p, r) 
if p < r then 
   q Partition (A, p, r) 
   Quick-Sort (A, p, q) 
   Quick-Sort (A, q + r, r) 

Обратите внимание, что для сортировки всего массива начальный вызов должен быть быстрой сортировки (A, 1, длина [A])

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

Разбиение массива

Процедура разбиения переставляет суб-массивы на месте.

Function: Partition (A, p, r) 
x ← A[p] 
i ← p-1 
j ← r+1 
while TRUE do 
   Repeat j ← j - 1 
   until A[j] ≤ x  
   Repeat i← i+1 
   until A[i] ≥ x  
   if i < j then  
      exchange A[i] ↔ A[j] 
   else  
      return j 

Анализ

Наихудшая сложность алгоритма быстрой сортировки — O (n 2 ) . Однако, используя эту технику, в средних случаях обычно мы получаем вывод за O (n log n) времени.