Является ли сортировка слиянием адаптивным алгоритмом?

У нас есть 3 варианта сортировки слиянием.

  1. Сверху вниз
  2. Вверх дном
  3. Естественный

Есть ли какие-нибудь из этих адаптивных алгоритмов? Например, если массив отсортирован, они воспользуются преимуществом отсортированного порядка.

По моему мнению, независимо от того, отсортирован массив или нет, сортировка слиянием все равно будет сравниваться, а затем слиться. Итак, ответ: ни один из них не является адаптивным.

Я правильно понимаю?


person MrCoder    schedule 13.05.2014    source источник


Ответы (3)


Сортировка естественным слиянием является адаптивной. Например, он выполняет только один проход по отсортированному массиву и выполняет N сравнений.

И сверху вниз, и снизу вверх не адаптивны, они всегда выполняют O (NlogN) операций.

person MBo    schedule 13.05.2014
comment
Даже когда массив отсортирован, массив будет разделен на части, и сравнение будет производиться между A [0..n / 2] и A [n / 2..n-1] через массивы B и C. - person MrCoder; 13.05.2014
comment
Вы видели описание естественной сортировки слиянием? Фаза предварительного слияния изолирует монотонные серии, затем фаза слияния объединяет их. Если весь массив монотонен, нет необходимости разделять и объединять. - person MBo; 13.05.2014

Сортировка слиянием - это реализация алгоритма «разделяй и властвуй». Вам нужно разделить весь массив на подмассивы. Например, [1, 3, 5, 6, 2, 4,1 10] делится на [1 3 5 6] и [2 4 1 10]. [1 3 5 6] делится на [1 3] и [5 6]. Теперь, когда отсортированы и [1 3], и [5 6], процедура обмена не требуется.

Так что есть хотя бы небольшая сложность, если массив отсортирован

person Md Johirul Islam    schedule 13.05.2014
comment
в вашем примере ключевое сравнение все еще проводится, что является нашей самой затратной операцией. Мы не беспокоимся об обмене местами здесь .. - person MrCoder; 13.05.2014

По мне, независимо от того, отсортирован массив или нет, сортировка слиянием все равно будет использоваться для сравнения

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

P.S быстрая сортировка включает сравнения (но адаптивна), и в худшем случае она делает около O (n ^ 2) сравнений.

P.P.S Radix sort, counting sort и bucket sort - некоторые примеры адаптивной сортировки;

person Community    schedule 13.05.2014
comment
Радиксная сортировка, подсчетная сортировка и сегментная сортировка - это своего рода алгоритмы сортировки без сравнения. - person ; 13.05.2014
comment
А как насчет быстрой сортировки? Разве это не адаптивно? - person MrCoder; 13.05.2014
comment
написав это: я не думаю, что его можно сортировать без каких-либо сравнений. Я имел в виду только то, что было бы неоптимально выбирать алгоритм, который требует n ^ 2 единиц памяти для операции, выполняемой с n элементами. - person ; 13.05.2014