Сортировка строк путем сравнения (например, стандартная функция QuickSort + strcmp) может быть немного медленной, особенно для длинных строк с общим префиксом (функция сравнения занимает O(s) времени, где s — длина строки), поэтому стандартное решение имеет сложность O(s * nlog n). Известны ли более быстрые алгоритмы?
Эффективный алгоритм сортировки строк
Ответы (3)
Если вы знаете, что строка состоит только из определенных символов (что почти всегда так), вы можете использовать вариант BucketSort или RadixSort.
Вы можете построить trie, который, я думаю, должен быть O(s*n)
.
O(s)
, и вам нужно сделать это n
раза.
- person Oliver Charlesworth; 07.08.2011
Пожалуйста, найдите «Sedgewick Multikey quick sort» (Седжвик написал известные учебники по алгоритмам на C и Java). Его алгоритм относительно прост в реализации и достаточно быстр. Это позволяет избежать проблемы, о которой вы говорите выше. Существует алгоритм пакетной сортировки, который претендует на более высокую скорость, но я не знаю ни одной реализации.
Есть статья Быстрая сортировка строк в C# и F#, который описывает алгоритм и содержит ссылку на код Седжвика, а также на код C#. (раскрытие: это статья и код, который я написал на основе статьи Седжвика).