Сортировать список строк: перемещать или обменивать только элементы

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

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

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

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

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

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

2 ответа

Решение

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

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

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

Есть третий метод:

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

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

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

Другие вопросы по тегам