Как лучше всего реализовать алгоритм сортировки такого типа?
Будучи насмешливым, я бы предложил использовать библиотечную реализацию быстрой сортировки с расстоянием до целевой строки в качестве ключа сортировки.
Это, конечно, не полезный ответ. Почему бы и нет? Потому что то, что вы действительно хотите знать, это «Какая метрика разницы для строк?»
Ответ на вопрос real , к сожалению, «зависит»; это зависит от того, какие свойства расстояния вам небезразличны.
Как говорится, прочитайте о расстоянии Левенштейна и что он действительно говорит о струнах.
Вы можете изменить базовый алгоритм, чтобы искажать метрику в пользу идентичных символов, встречающихся в длинных сериях, путаясь с весом различных шагов в матрице динамического программирования.
Вы также можете использовать алгоритм Soundex, который говорит о том, какие строки звучат одинаково (но это лучше всего подходит для коротких строк; я не знаю, какой тип ввода вы используете).
Если строки имеют одинаковую длину, вы также можете использовать расстояние Хэмминга (посчитать количество индексов, в которых строки отличаются). Вероятно, это можно обобщить до что-то , считая (в одностороннем порядке) несуществующие индексы как всегда разные, что дает вам нечто похожее на Левенштейна (может быть, своего рода 'sorta').
Краткая версия: это зависит. Я уже внес свой вклад, но не могу сказать, какое решение будет правильным для вас без дополнительной информации от вас.