Должна ли функция сравнения быть симметричной?(или: сортировка списка с помощью значения «Все равно») - PullRequest
0 голосов
/ 19 декабря 2011

У меня есть список объектов с атрибутом перечисления, по которому я хочу отсортировать.Из значений перечисления мне важны только A, B и C, и я требую, чтобы в отсортированном списке A При проведении сравнения необходимо ли указывать согласованный порядок для сторонних значений перечисления относительно критических значений?Например, вызывает ли это проблемы, если сравнение между A, D приводит к -1, тогда как сравнение между D, A приводит к 0, или также -1?

Этот код реализуется в C #, которыйЯ считаю, использует быструю сортировку.После анализа алгоритма быстрой сортировки может показаться, что это может стать проблемой, если одно из посторонних значений станет опорным.Необходимость явной обработки посторонних значений приводит к большему количеству обращений.Возможно, я мог бы присвоить значения перечислениям, но нет никакой гарантии, что не будет другого порядка сортировки, который был бы полезен в других случаях.Я не уверен, достаточно ли просто предположить, что список будет лишен дополнительных значений перед сортировкой, поскольку это может привести к ошибкам, которые трудно обнаружить, если допустить нарушение.Я мог бы выдавать ArgumentException, когда эти значения используются, но тогда я бы добавил достаточно случаев, которые я мог бы просто отсортировать вместо них.О лучшем варианте, который я могу придумать, - это создать функцию приведения, которая преобразует перечисления в целые.

1 Ответ

1 голос
/ 19 декабря 2011

Обычно да, сравнение должно быть последовательным.(Я не говорю, что дело обстоит так для всех алгоритмов, но это касается, например, qsort, и вы должны действительно придерживаться этого.)

Что вы можете сделать, чтобы упростить ваше дело, так этопросто чтобы учесть, что все неинтересные значения равны, и что все они либо меньше, чем A, либо больше, чем C.

Таким образом, они будут упакованы вверху или внизу результатов, иВаша функция сравнения не должна быть слишком сложной.

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