1

Delphi/Pascal では、TStringList をアルファベット順にソートしたいと考えています。しかし、この目的のためには、次の 2 つの方法しか使用できません。

Move:文字列をあるインデックス位置から別のインデックス位置に移動し、必要に応じて他の文字列をシフトします。

Exchange:リスト内の 2 つの文字列を、インデックス位置で識別して交換します。

どうすればこれを行うことができますか? 私はループですべてのアイテムを調べて、次のようなものにするという考えを持っていました:

  1. lastFirstLetter := コピー(CurrentItem, 1, 1)
  2. 次の項目に移動
  3. currentFirstLetter := Copy(CurrentItem, 1, 1)
  4. if ord(currentFirstLetter) < ord(lastFirstLetter) then exchange(lastItem, currentItem)

これら 2 つの方法で StringList をソートする最速の方法は何でしょうか? ちなみに、sort メソッドと sorted プロパティは使用できません。

4

2 に答える 2

3

(1) スワップと (2) 交換の 2 つの方法を指定します。

3 番目の方法があります。

(3) 文字列へのポインターの TList を保持し、ポインターを並べ替えます。

この方法では、すべての文字列がそのまま残り、より高速になる可能性があります。

質問を参照してください:Delphiで配列をソートする最良の方法とBarry Kellyの受け入れられた回答、および他の回答。

于 2010-02-14T01:23:10.213 に答える
1

移動/交換方法はあなたが必要とするすべてです。ただし、選択できるアルゴリズムはたくさんあります。動画による比較については、このサイト (簡単な Google 検索から) をご覧ください: http://www.sorting-algorithms.com/

これらのアルゴリズムはすべて、「交換」のみを使用するヒープとクイックソートを除いて、「移動」を使用していると思います

于 2010-02-14T00:17:56.350 に答える