Що означає алгоритм сортування "стабільним"?


43

Читаючи про різні алгоритми сортування, я бачив, як згадувалося, що деякі є "стабільними", а деякі - ні. Що це означає, і які компроміси беруть участь на цій основі при виборі алгоритму?


32
На це питання можна легко відповісти протягом хвилини за допомогою wikipedia. en.wikipedia.org/wiki/Sorting_algorithm
Mare Infinitus


4
Це питання, якого не вистачає власних досліджень. Відповіли малюнком у Вікіпедії. І отримує дійсно хороший відгук, який якось сумує. ІМХО слід закрити, а не отримувати оновлення.
Mare Infinitus

4
З іншого боку, я просто побачив це і дізнався щось нове. Якби я знав, що цього не знаю, то міг би це дослідити, але оскільки ОП задав питання, я тепер знаю, що я не знав, що не знав.
Казарк

4
Як правило, "просто погуглити його" або "подивитися на вікіпедію" - це неприйнятні відповіді на сайтах StackExchange. Тому що вони не дають відповіді на те, що скаржник перевіряється як дійсне питання із закликом до влади google та wikipedia. Якщо питання легко є дублікатом іншого питання або запитань у програмі programer.stackexchange, тоді ви можете поскаржитися.
Майкл Паулуконіс

Відповіді:


88

Стабільний сорт - це такий, який зберігає початковий порядок вхідного набору, де алгоритм порівняння не розрізняє два та більше елементів.

Розглянемо алгоритм сортування, який сортує картки за рангами , але не за матом. Стабільний сорт гарантує збереження оригінального порядку карт, що мають однаковий ранг; нестабільний сорт не буде.

введіть тут опис зображення


38
Виправлення: нестабільний алгоритм виявляє невизначену поведінку, коли два елементи рівні, цілком можливо, що порядок іноді зберігається.
aaaaaaaaaaaa

9
Гарна картинка, дуже схожа на wikipedia en.wikipedia.org/wiki/Sorting_algorithm
Mare Infinitus

9
@MareInfinitus: Це у відкритому доступі. Перевірте атрибуцію на вихідному зображенні.
Роберт Харві

2
Гарна картина пояснює швидше і глибше, ніж багато слів у середньому випадку. Юридичні питання - це не те, про що я хотів поговорити.
Mare Infinitus

3
@RobertHarvey Насправді, я вважаю, що редактор є правильним. На даний момент у вашому дописі йдеться про те, що стабільний сорт зберігає впорядкування карт в одному костюмі, але картки в одному костюмі матимуть різні ранги і, таким чином, повинні бути переставлені для досягнення відсортованого порядку. Наприклад, сорт не зберігає порядок 2 і 5 сердець. Саме впорядкування карт однакового рангу (та різних костюмів) робить різницю між стабільною та нестабільною.
David Z

26

Стабільні алгоритми зберігають відносний порядок елементів.

Таким чином, стабільний алгоритм сортування зберігатиме відносний порядок значень, які порівнюються як рівні.

Розглянемо алгоритм сортування, де ми сортуємо набір 2d точок на основі їх розмірності X.

Колекція для сортування: {(6, 3), (5, 5), (6, 1), (1, 3)}

Стабільне сортування: {(1, 3), (5, 5), (6, 3), (6, 1)}

Регулярне сортування: або {(1, 3), (5, 5), (6, 3), (6, 1)}, або{(1, 3), (5, 5), (6, 1), (6, 3)}


Що стосується компромісу ... ну, стабільне сортування є менш ефективним, але іноді це потрібно.

Наприклад, коли користувач натискає на заголовок стовпця, щоб сортувати значення в інтерфейсі, розумно очікувати, що його попередній порядок сортування буде використаний у випадку рівних значень.


2
Це менш ефективно? Це здається "очевидним", але деякі з найкращих алгоритмів сортування є стабільними за своєю природою (наприклад, що-небудь, засноване на сортуванні злиття, наприклад, сортування Тіма), їм не потрібно робити явних додаткових робіт, щоб бути стабільними.

9
Стабільність взагалі не має нічого спільного з продуктивністю. Mergesort працює в O (n * log n) і стабільний. Хепсорт має схожі показники, але не є стабільним.
Mare Infinitus

2
"Стабільний" також може застосовуватися до структур даних, наприклад. "стабільна купа" - це купа, яка видаляє елементи, які мають однаковий пріоритет, у тому ж порядку, в якому вони були в черзі. Це дуже важливо для ефективних алгоритмів пошуку шляхів.
BlueRaja - Danny Pflughoeft

1
Немає стабільних сортів, які б порівнювали O (n ln n), а також O (1) в пам'яті. Швидкість - не єдиний показник ефективності. Те, що ви не можете стабільно сортувати на місці.
QuestionC

3
@QuestionC Здається, сортування блоків є стабільним і відповідає цим межам.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.