Используются ли алгоритмы сортировки в NSArray стабильными сортировками?

Используются ли алгоритмы сортировки различными методами сортировки в NSArray Стабильный? (Как и в случае, если они являются алгоритмами «стабильной сортировки», где элементы с одинаковым ключом сортировки сохраняют свои относительные порядки.)

 Titouan de Bailleul07 мая 2012 г., 20:33
Ладно, я думал, что поведение всегда было одинаковым. Хорошо знать
 Titouan de Bailleul07 мая 2012 г., 19:57
Ты попробовал?
 omz07 мая 2012 г., 20:28
@ TDeBailleul «Попробовать» не очень помогает в этом случае. Сортировка может быть стабильной в некоторых случаях, но не в других, в зависимости от размера данных, способа построения массива и т. Д.
 gnasher72924 янв. 2015 г., 23:24
Если он не стабилен в одном случае, он не стабилен. Так что "попробовать"являетс полезно.

Ответы на вопрос(3)

Док, нет подробностей относительно окончательного заказа идентичных предметов.

Поэтому я считаю, что делать какие-либо предположения по поводу заказа было бы плохой идеей. Даже если вы определите экспериментально, каков порядок, это может измениться в зависимости от количества элементов в массиве или от того, какая версия iOS выполняет сортировку.

Для меня я бы придерживался обещаний, предоставленных документацией.

 JustSid07 мая 2012 г., 20:30
Я бы не стал доверять, даже если бы я тщательно его проверил, Apple может изменить используемые алгоритмы в следующей версии, делая любые тесты бессмысленными и может вызвать некоторые странные ошибки.
 wxactly14 апр. 2013 г., 05:56
Документация Делает укажите, это просто скрыто за документацией дляNSSortOptions: Developer.apple.com / библиотека / ИОС / # документация / какао / Справочные материалы / ...

официальный" ответ, который я нашел об этом, это 2002 список рассылки Крис Кейн из Apple:

Стабильность методов сортировки NSArray / NSMutableArray не определена, поэтому следует ожидать, что они нестабильны. Будучи неопределенной, ситуация может также меняться от релиза к релизу, хотя я (сам) не ожидаю, что это вероятно. В текущей реализации используется быстрая сортировка, версия алгоритма, почти идентичная процедуре BSD qsort (). Куча экспериментов обнаружила в какой-то момент, что это было трудно сделать лучше, чем это для общих типов данных, которые мы проходили на тестах. [Конечно, если у вас есть дополнительная информация о сортируемых данных, можно использовать другие алгоритмы или модификации, которые помогут в этом случае.]

Я не знаю, правда ли это, учитывая, сколько лет посту, но, вероятно, лучше предположить, чтоNSArrayетоды сортировки @ являютсян стабильный.

NSSortStable. От документация по NSSortOptions:

NSSortStable

Указывает, что отсортированные результаты должны возвращать сравниваемые элементы, имеющие одинаковое значение в том порядке, в котором они возникли изначально.

Если эта опция не указана, равные объекты могут или не могут быть возвращены в их первоначальном порядке.

Если вам нужна стабильная сортировка, попробуйте что-то вроде:

[array sortWithOptions:NSSortStable usingComparator:^NSComparisonResult(id obj1, id obj2) {
    return [obj1 compare:obj2];
}];
 wxactly24 янв. 2015 г., 23:14
(void)sortWithOptions:usingComparator: работает для изменяемых массивов ... есть также(NSArray *)sortedArrayWithOptions:usingComparator: если это плывет на твоей лодке

Ваш ответ на вопрос