2016-11-06 8 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..A를 표시합니다. 알고리즘이나 리치 헷드에 라인을 추가하는 방식에 문제가 있습니까? 감사합니다델파이 선택 정렬 역순으로 정렬하는 것 같습니다

답변

2

K가 L보다 작고 K 번째가 L 번째보다 작 으면 항목을 서로 바꿉니다. 당신은 당신의 비교가 틀린 방법 라운드가 있습니다. < 대신 >을 사용하십시오.

색인 생성 또한 모호합니다. 어레이가 실제로 1 기반입니까? 그리고 N-1에 1을 더하는 이유는 무엇입니까? 마지막 항목이 누락 되었습니까? 즉, 코드에 다른 결함이 있다고 의심됩니다. 당신은 내가 확신 할 수 없을 정도로 그것을 모두 보여주지 않았습니다.

마지막으로 내장 정렬 기능을 사용하지 않는 이유는 무엇입니까?

+0

감사합니다. – RT5754

+0

학교에 정렬 알고리즘을 사용하는 법을 배워야합니다. – RT5754

+0

@ RT5754 학습하는 경우 디버깅 기술도 배워야합니다. 1) 종이에 알고리즘을 단계별로 학습하십시오. 작은 배열이 어떻게 보이는지 그리고 코드의 각 단계에서 각 변수를 추적하십시오. 2) 디버거 사용 방법을 익히십시오. 한 번에 한 줄씩 코드를 단계별로 살펴보면 배열이 어떻게 바뀌고 있는지 정확히 알 수 있으며 코드가 내림차순으로 정렬 된 이유를 직접 알아 냈습니다. –