Сортировать список строк: перемещать или обменивать только элементы
В Delphi / Pascal я хотел бы отсортировать TStringList по алфавиту. Но для этой цели я могу использовать только следующие два метода:
Переместить: перемещает строку из одной позиции индекса в другую, перемещая другие строки в зависимости от ситуации.
Обмен: Меняет местами две строки в списке, что определяется их позициями в индексе.
Как я мог это сделать? У меня была идея пройти через все элементы с помощью цикла и что-то вроде этого:
- lastFirstLetter: = Copy (CurrentItem, 1, 1)
- перейти к следующему пункту
- currentFirstLetter:= Copy(CurrentItem, 1, 1)
- если ord(currentFirstLetter)
Какой самый быстрый способ сортировки StringList с этими двумя методами? Я не могу использовать метод сортировки и отсортированное свойство, кстати.
2 ответа
Методы перемещения / обмена - это все, что вам нужно. Однако у вас есть много алгоритмов на выбор! Взгляните на этот сайт (из быстрого поиска Google) для анимированных сравнений: http://www.sorting-algorithms.com/
Я думаю, что все эти алгоритмы просто используют "ход", кроме кучи и быстрой сортировки, которые используют только "обмен"
Вы предоставляете два метода: (1) своп и (2) обмен.
Есть третий метод:
(3) Держите TList указателей на ваши строки и сортируйте указатели.
Этот метод оставит все ваши строки там, где они есть и может быть быстрее.
См. Вопрос: " Лучший способ сортировки массива в Delphi" и "Барри Келли", а также другие ответы.