Jump to content

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

(Перенаправлено из сортировки Бинго )
Сортировка выбором
Сорт Алгоритм сортировки
Структура данных Множество
Худшая производительность сравнения, свопы
Лучшая производительность сравнения, менять
Средняя производительность сравнения, свопы
Наихудшая пространственная сложность вспомогательный
Оптимальный Нет

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

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

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

Вот пример этого алгоритма сортировки, сортирующего пять элементов:

Сортированный подсписок Несортированный подсписок Наименьший элемент в несортированном списке
() (11, 25, 12, 22, 64) 11
(11) (25, 12, 22, 64) 12
(11, 12) (25, 22, 64) 22
(11, 12, 22) (25, 64) 25
(11, 12, 22, 25) (64) 64
(11, 12, 22, 25, 64) ()
Анимация сортировки выбором. Красный — текущий мин. Желтый — отсортированный список. Синий — текущий элемент.

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

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

arr[] = 64 25 12 22 11// Find the minimum element in arr[0...4]// and place it at beginning11 25 12 22 64// Find the minimum element in arr[1...4]// and place it at beginning of arr[1...4]11 12 25 22 64// Find the minimum element in arr[2...4]// and place it at beginning of arr[2...4]11 12 22 25 64// Find the minimum element in arr[3...4]// and place it at beginning of arr[3...4]11 12 22 25 64 

Реализации

[ редактировать ]

Ниже приведена реализация C. на

/* a[0] to a[aLength-1] is the array to sort */int i,j;int aLength; // initialise to a's length/* advance the position through the entire array *//*   (could do i < aLength-1 because single element is also min element) */for (i = 0; i < aLength-1; i++){    /* find the min element in the unsorted a[i .. aLength-1] */    /* assume the min is the first element */    int jMin = i;    /* test against elements after i to find the smallest */    for (j = i+1; j < aLength; j++)    {        /* if this element is less, then it is the new minimum */        if (a[j] < a[jMin])        {            /* found new minimum; remember its index */            jMin = j;        }    }    if (jMin != i)     {        swap(&a[i], &a[jMin]);    }}

Сложность

[ редактировать ]

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

По арифметической прогрессии ,

что представляет собой сложность по количеству сравнений.

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

[ редактировать ]

Среди алгоритмов квадратичной сортировки (алгоритмы сортировки с простым средним случаем Θ( n 2 ) ), сортировка выбором почти всегда превосходит сортировку пузырьком и сортировку gnome . Сортировка вставками очень похожа на то, что после k -й итерации первая элементы массива расположены в отсортированном порядке. Преимущество сортировки вставками заключается в том, что она сканирует столько элементов, сколько необходимо для размещения st, а сортировка выбором должна сканировать все оставшиеся элементы, чтобы найти й элемент.

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

Хотя сортировка выбором предпочтительнее сортировки вставкой с точки зрения количества операций записи ( свопы против до свопов, причем каждый своп представляет собой две записи), это примерно в два раза превышает теоретический минимум, достигаемый циклической сортировкой , которая выполняет не более n операций записи. Это может быть важно, если запись значительно дороже, чем чтение, например, в EEPROM или флэш-памяти , где каждая запись сокращает срок службы памяти.

Сортировка выбором может быть реализована без непредсказуемых ветвей в интересах предсказателей ветвей ЦП путем нахождения местоположения минимума с помощью кода без ветвей и последующего безусловного выполнения замены.

Наконец, сортировка выбором значительно уступает по производительности на больших массивах. алгоритмы «разделяй и властвуй», такие как сортировка слиянием . Однако сортировка вставкой и сортировка выбором обычно выполняются быстрее для небольших массивов (т. е. менее 10–20 элементов). На практике полезной оптимизацией рекурсивных алгоритмов является переключение на сортировку вставкой или сортировку выбором для «достаточно маленьких» подсписков.

Варианты

[ редактировать ]

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

Двунаправленный вариант сортировки выбором (называемый сортировкой двойным выбором или иногда коктейльной сортировкой из-за ее сходства с сортировкой шейкером ) находит как минимальные, так и максимальные значения в списке на каждом проходе. Для этого требуется три сравнения на два элемента (сравнивается пара элементов, затем больший сравнивается с максимальным, а меньший сравнивается с минимальным), а не одно сравнение при обычной сортировке выбором на каждый элемент, но требует только вдвое меньшего количества проходов. чистая экономия 25%.

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

В варианте сортировки бинго элементы сортируются путем многократного просмотра оставшихся элементов в поисках наибольшего значения и перемещения всех элементов с этим значением в их конечное место. [1] Как и сортировка подсчетом , это эффективный вариант, если имеется много повторяющихся значений: сортировка выбором выполняет один проход по оставшимся элементам для каждого перемещенного элемента , а сортировка Бинго выполняет один проход для каждого значения . После начального прохода для поиска наибольшего значения последующие проходы перемещают каждый элемент с этим значением в его конечное местоположение, одновременно находя следующее значение, как в следующем псевдокоде (массивы начинаются с нуля, а цикл for включает как верхний, так и нижний пределы , как в Паскале ):

bingo(array A){ This procedure sorts in ascending order by  repeatedly moving maximal items to the end. }begin    last := length(A) - 1;    { The first iteration is written to look very similar to the subsequent ones,      but without swaps. }    nextMax := A[last];    for i := last - 1 downto 0 do        if A[i] > nextMax then            nextMax := A[i];    while (last > 0) and (A[last] = nextMax) do        last := last - 1;    while last > 0 do begin        prevMax := nextMax;        nextMax := A[last];        for i := last - 1 downto 0 do             if A[i] > nextMax then                 if A[i] <> prevMax then                     nextMax := A[i];                 else begin                     swap(A[i], A[last]);                     last := last - 1;                 end        while (last > 0) and (A[last] = nextMax) do            last := last - 1;    end;end;

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

См. также

[ редактировать ]
  1. ^ Общественное достояние В этой статье использованы общедоступные материалы из Пол Э. Блэк. «Сортировка Бинго» . Словарь алгоритмов и структур данных . НИСТ .
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: cb88a7d7c7a2ad0e9292bfae816e7487__1722381840
URL1:https://arc.ask3.ru/arc/aa/cb/87/cb88a7d7c7a2ad0e9292bfae816e7487.html
Заголовок, (Title) документа по адресу, URL1:
Selection sort - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)