Изменения

Перейти к: навигация, поиск

Сортировка подсчётом

305 байт убрано, 23:11, 17 мая 2012
Нет описания правки
'''Сортировка подсчётом''' {{---}} алгоритм сортировки, целых чисел в котором предполагается, что все сортируемые элементы {{---}} целые числа, принадлежащие интервалу диапазоне от <tex>0</tex> до некоторой константы <tex>k</tex>, где <tex>k</tex> {{---}} некоторая целая константаработающий за линейное время.
== Основная идея ==
Основная идея сортировки подсчетом заключается состоит в том, чтобы для каждого элемента <tex>x</tex> определить входного массива подсчитать количество элементов, которые меньше меньших данного. Эта информация будет указывать на позиции элементов в отсортированном массиве. Например, если для элемента <tex>x</tex>. С помощью этого, мы можем поместить элемент туда, где он должен находиться в отсортированном массиве. Например, если есть количество таких элементов будет <tex>42</tex> элемента, которые меньше то <tex>x</tex>, то после сортировки он будет занимать <tex>43</tex>-ю позициюв отсортированном массиве. Если допускается, что несколько элементов элементы могут иметь одинаковое значениеодинаковые значения, то необходимо модифицировать алгоритм придётся модифицировать, потому что мы не можем так как нельзя разместить все такие элементы в одной позиции. Использование сортировки подсчётом целесообразно, когда диапазон возможных значений входных данных достаточно мал по сравнению с количеством элементов в сортируемом множестве, например, миллион натуральных чисел меньших <tex>1000</tex>. Эффективность алгоритма падает, когда необходимо сортировать различные элементы, попавшие в одну ячейкупозицию.
== Простой алгоритм ==
В первом алгоритме первые два цикла работают за <tex>\Theta(k)</tex> и <tex>\Theta(n)</tex>, соответственно; двойной цикл за <tex>\Theta(n + k)</tex>. Во втором алгоритме циклы занимают <tex>\Theta(k)</tex>, <tex>\Theta(n)</tex>, <tex>\Theta(k)</tex> и <tex>\Theta(n)</tex>, соответственно. Итого оба алгоритма имеют линейную временную трудоёмкость <tex>\Theta(n + k)</tex>. Используемая память в первом алгоритме равна <tex>\Theta(k)</tex>, а во втором <tex>\Theta(n + k)</tex>.
На практике сортировка подсчетом применяетсяИспользование сортировки подсчётом целесообразно, когда диапазон возможных значений входных данных достаточно мал по сравнению с количеством элементов в сортируемом множестве, например, если <tex>k n = O(n)1000000</tex> и все элементы натуральные числа меньшие <tex>1000</tex>, а в этом случае то время работы алгоритма равно <tex>\Theta(n)</tex>. Эффективность алгоритма падает, когда необходимо сортировать различные элементы, попавшие в одну ячейку.
== Источники ==
[[Категория:Дискретная математика и алгоритмы]]
[[Категория:СортировкиСортировка]]
277
правок

Навигация