麻烦算法高手帮看看我的快速排序,怎么都排不对?
procedure Sort(stringList:TStringList;left,right:integer);
var
i,j:integer;
vot:string;
begin
if (left<right) then
begin
i:=left;
j:=right;
vot:=stringList[i];
while (i<>j) do
begin
while (CompareStr(vot,stringList[i])<0) and (i<j) do
j:=j-1;
if (i<j) then
begin
stringList[i]:= stringList[j];
i:=i+1;
end;
while (CompareStr(vot,stringList[i])>0) and (i<j) do
i:=i+1;
if (i<j) then
begin
stringList[j]:= stringList[i];
j:=j-1;
end;
end;
stringList[i]:=vot;
i:=i+1;
j:=j-1;
Sort(stringList,left,j);
Sort(stringList,i,right);
end;end;
procedure Sort(stringList:TStringList;left,right:integer);
var
i,j:integer;
vot:string;
begin
if (left<right) then
begin
i:=left;
j:=right;
vot:=stringList[i];
while (i<>j) do
begin
while (CompareStr(vot,stringList[i])<0) and (i<j) do
j:=j-1;
if (i<j) then
begin
stringList[i]:= stringList[j];
i:=i+1;
end;
while (CompareStr(vot,stringList[i])>0) and (i<j) do
i:=i+1;
if (i<j) then
begin
stringList[j]:= stringList[i];
j:=j-1;
end;
end;
stringList[i]:=vot;
i:=i+1;
j:=j-1;
Sort(stringList,left,j);
Sort(stringList,i,right);
end;end;
var
I, J, P: Integer;
vot:string;
begin
repeat
I := L;
J := R;
P := (L + R) shr 1;
repeat
vot := stringList.Strings[P];
while CompareStr(vot,stringList.Strings[I]) < 0 do Inc(I);
while CompareStr(vot,stringList.Strings[J]) > 0 do Dec(J);
if I <= J then
begin
vot := stringList.Strings[I];
stringList.Strings[I] := stringList.Strings[J];
stringList.Strings[J] := vot;
if P = I then
P := J
else if P = J then
P := I;
Inc(I);
Dec(J);
end;
until I > J;
if L < J then Sort(stringList,L, J);
L := I;
until I >= R;
end;
var
i, j: integer;
vot, Temps: string;
begin
i := left;
j := right;
vot := stringList[(i + j) div 2];
repeat
while stringList[i] < vot do Inc(i);
while stringList[j] > vot do Dec(j);
if i <= j then
begin
Temps := stringList[i];
stringList[i] := stringList[j];
stringList[j] := Temps;
Inc(i);
Dec(j);
end;
until i > j;
if j > left then Sort(stringList, left, j);
if i < right then Sort(stringList, i, right);
end;