2016-11-06 5 views
0
procedure TfrmSorting.btnSortClick(Sender: TObject); 
var 
K,L,I,iNumElements : integer; 
sKeep : string; 
begin 
iNumElements := length(arrNames); 
for K := 1 to iNumElements - 1 do 
begin 
    for L := K + 1 to iNumElements do 
    begin 
     if arrNames[K] < arrNames[L] then 
    begin 
     sKeep := arrNames[L]; 
     arrNames[L] := arrNames[K]; 
     arrNames[K] := sKeep; 
    end; 
end; 
end; 
reditNames.Lines.Clear; 
I := 1; 
for K := 1 to iNumElements - 1 do 
    begin 
    reditNames.Lines.Add(arrNames[I]); 
    I := I + 1; 
    end; 
end; 

私はこのソートアルゴリズムを使って配列をソートしています。私はその後、リッチエディットで内容を表示しますが、A..ZからZの代わりにZ..Aを表示します。アルゴリズムに問題があるのですか、またはリッチェットにラインを追加する方法はありますか?ありがとうデルファイの選択ソートが後方にソートされているようです

答えて

2

KがLより小さく、K番目がL番目よりも小さい場合、アイテムを交換します。あなたはあなたの比較を間違った方法で行います。 <ではなく>を使用してください。

索引付けも疑わしいです。あなたのアレイは本当に1ベースですか?なぜN-1に1を加算するだけですか?最後の項目がありません他の言葉で言えば、あなたのコードに他の欠陥があると思われます。あなたはそれをすべて見せていないので、私は確信が持てません。

最後に、組み込みソート機能を使用しないでください。

+0

Aha私は感謝を見る – RT5754

+0

学校にソートアルゴリズムを使用する方法を学ぶ必要がある – RT5754

+0

@ RT5754学習している場合は、デバッグ技術も学ぶ必要があります。 1)紙の上であなたのアルゴリズムを進めることを学ぶ。小さな配列の外観を描画し、コードの各ステップで各変数を追跡します。 2)デバッガの使い方を学ぶ。一度に1行ずつコードをステップ実行すると、配列がどのように変化しているかが正確にわかり、コードが降順でソートした理由がわかります。 –

関連する問題