Сортировать список строк: перемещать или обменивать только элементы - PullRequest
1 голос
/ 14 февраля 2010

В Delphi / Pascal я бы хотел отсортировать TStringList по алфавиту. Но для этой цели я могу использовать только два следующих метода:

Move: Перемещает строку из одной позиции индекса в другую, перемещая другие строки в зависимости от ситуации.

Обмен: Меняет местами две строки в списке в соответствии с позициями их индексов.

Как я мог это сделать? У меня была идея пройти все пункты с помощью цикла и что-то вроде этого:

  1. lastFirstLetter: = Copy (CurrentItem, 1, 1)
  2. перейти к следующему пункту
  3. currentFirstLetter: = Copy (CurrentItem, 1, 1)
  4. если ord (currentFirstLetter)

Какой самый быстрый способ сортировки StringList с помощью этих двух методов? Кстати, я не могу использовать метод сортировки и отсортированное свойство.

Ответы [ 2 ]

3 голосов
/ 14 февраля 2010

Вы предоставляете два метода: (1) своп и (2) обмен.

Существует третий метод:

(3) Держите TList указателей на ваши строки и сортируйте указатели.

Этот метод оставит все ваши строки там, где они есть и может быть быстрее.

См. Вопрос: Лучший способ сортировки массива в Delphi и принятый ответ Барри Келли, а также другие ответы.

1 голос
/ 14 февраля 2010

Методы перемещения / обмена - все, что вам нужно. Однако у вас есть много алгоритмов на выбор! Просмотрите анимированные сравнения на этом сайте (из быстрого поиска в Google): http://www.sorting -algorithms.com /

Я думаю, что все эти алгоритмы просто используют «ход», кроме кучи и быстрых сортировок, которые используют только «обмен»

...