2016-11-06 63 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; 

我正在使用這種排序算法來排序數組。然後,我將內容放在一個RichEdit上,而不是從A..Z去顯示Z..A。這個算法有問題嗎?或者我在向Richedit添加行的方式有問題?謝謝德爾福選擇排序似乎向後排序

回答

2

K小於L,如果第K個小於第L個,則交換項目。你有比較錯誤的方式。使用>而不是<

您的索引也是可疑的。你的陣列真的是基於1的嗎?你爲什麼只將N-1加到輸出中?你是否錯過了最後一項?換句話說,我懷疑你的代碼中存在其他缺陷。你沒有顯示出來,所以我不能確定。

最後,爲什麼不使用內置的排序功能?

+0

啊哈我看到了謝謝 – RT5754

+0

我們需要學習如何使用排序算法學校 – RT5754

+0

@ RT5754如果您正在學習,您還需要學習調試技巧。 1)學習在紙面上逐步完成算法。繪製一個小數組的樣子,並在代碼的每一步跟蹤每個變量。 2)學習使用調試器。當你逐步瀏覽代碼1行時,你會清楚地看到數組是如何改變的,並且會自己弄清楚爲什麼你的代碼按降序排列。 –