2016-06-06 2 views
-3

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

1) Когда и где требуется слияние на месте? Практическое использование слияния на месте.

2) Что произойдет, если входные массивы для слияния на месте не отсортированы?

3) Что ест больше памяти для сортировки между сортировкой Merge, сортировкой на месте и быстрой сортировкой?

Примечание: Я прошу относительно «std :: inplace_merge», который является алгоритмом stl.

+0

Я буду так рад, если вы добавите комментарий здесь, когда будете голосуйте за моих друзей. По крайней мере, вы должны дать возможность узнать, что не так с моим вопросом. И если это возможно, пожалуйста, поделитесь материалами, если это основной вопрос вместе с тем, чтобы опросить вопрос. Все, что я хочу, это концепция. Благодарю. –

ответ

2

1) Сортировка слияния на месте используется, если вы хотите отсортировать список по времени O (nlogn), используя меньшее пространство, чем стандартное объединение.

2) Вся цель сортировки состоит в том, чтобы сортировать входные массивы, поэтому не отсортированные массивы ввода будут отсортированы по месту объединения.

3) Mergesort использует больше памяти, потому что он создает два новых массива половинного размера для двух рекурсивных вызовов. Сортировка слияния на месте и быстрая сортировка должны занимать одно и то же пространство, потому что они оба на месте. Для mergesort, in-place означает O (log n) дополнительное пространство от хранения соответствующих индексов массива длины n, а не строгое значение O (1) на месте. Quicksort занимает O (nlogn) дополнительное пространство в худшем случае, так как могут быть рекурсивные вызовы O (n), каждый из которых имеет указатели, которые занимают пространство O (logn).

Надеюсь, это поможет.

+0

Осторожно с формулировкой «на месте» имеет два определения. «В самой строгой форме алгоритм может иметь только постоянное количество дополнительного пространства, считая все, включая вызовы функций и указатели ... В более широком смысле, на месте означает, что алгоритм не использует дополнительное пространство для манипуляции с вводом, но может потребовать небольшое, хотя и непостоянное дополнительное пространство для его работы. Обычно это пространство O (log n), хотя иногда допускается что-либо в o (n) ». https://en.wikipedia.org/wiki/In-place_algorithm –

+0

@MooingDuck Спасибо, я отредактирую свой ответ, чтобы отразить это. – ghui

+0

Quicksort берет дополнительную резервную память (n), дополнительную память O (n). Я не знаю никого, кто использует «внешнюю» память для алгоритмов. –

Смежные вопросы