1

在 Delphi / Pascal 中,我想按字母顺序对 TStringList 进行排序。但是为了这个目的,我只能使用以下两种方法:

移动:将字符串从一个索引位置移动到另一个索引位置,并根据需要移动其他字符串。

交换:交换列表中的两个字符串,由它们的索引位置标识。

我怎么能这样做?我的想法是用一个循环遍历所有项目,然后是这样的:

  1. lastFirstLetter := Copy(CurrentItem, 1, 1)
  2. 转到下一项
  3. currentFirstLetter := Copy(CurrentItem, 1, 1)
  4. 如果 ord(currentFirstLetter) < ord(lastFirstLetter) then exchange(lastItem, currentItem)

使用这两种方法对 StringList 进行排序的最快方法是什么?顺便说一下,我不能使用 sort 方法和 sorted 属性。

4

2 回答 2

3

你给出了两种方法:(1)交换和(2)交换。

还有第三种方法:

(3) 保留一个指向字符串的指针的 TList 并对指针进行排序。

此方法会将所有字符串保留在原处,并且可能更快。

请参阅问题:Best Way To Sort An Array In Delphi和 Barry Kelly 接受的答案以及其他答案。

于 2010-02-14T01:23:10.213 回答
1

移动/交换方法是您所需要的。但是,您有很多算法可供选择!看看这个网站(通过谷歌快速搜索)进行动画比较: http: //www.sorting-algorithms.com/

我认为所有这些算法都只使用“移动”,除了堆和只使用“交换”的快速排序

于 2010-02-14T00:17:56.350 回答