Алгоритмы стабильной сортировки сортируют элементы таким образом, что порядок повторяющихся элементов во входных данных сохраняется и в выходных данных.
Сортировка кучей включает два этапа:
- Создание кучи
- Удаление и добавление корневого элемента из дерева кучи в новый массив, который будет отсортирован по порядку
<сильный>1. Разрывы порядка во время создания кучи
Допустим, входной массив равен {1, 5, 2, 3, 2, 6, 2}, и чтобы увидеть порядок двойки, скажем, что это 2a, 2b и 2c, поэтому массив будет {1, 5, 2а, 3, 2б, 6, 2в}
Теперь, если вы создадите из него кучу (здесь min-heap), представление массива будет {1, 2b, 2a, 3, 5, 6, 2c}, где порядок 2a и 2b уже изменился.
<сильный>2. Порядок прерывается при удалении корневого элемента
Теперь, когда нам нужно удалить корневой элемент (в нашем случае 1) из кучи, чтобы поместить его в другой новый массив, мы меняем его последней позицией и удаляем оттуда, следовательно, меняем кучу на {2c, 2b, 2a, 3, 5, 6}. Мы повторяем то же самое, и на этот раз мы удалим «2c» из кучи и поместим его в конец массива, где мы поместили «1».
Когда мы закончим повторять этот шаг, пока куча не станет пустой, и каждый элемент будет перенесен в новый массив, новый массив (отсортированный) будет выглядеть как {1, 2c, 2b, 2a, 3, 5, 6}.
Входные данные для сортировки кучей: {1, 5, 2a, 3, 2b, 6, 2c} --> Выходные данные: {1, 2c, 2b, 2a, 3 , 5, 6}
Отсюда мы видим, что повторяющиеся элементы (двойки) не находятся в том же порядке в массиве, отсортированном кучей, как они появляются во входных данных, и, следовательно, сортировка кучей не является стабильной!
person
user0904
schedule
22.01.2019