以下 Quicksort proc 应该可以完成这项工作:
//Start is the index of the first item on the list - usually 0
//Stop is the index of the last item of the list e.g. Count - 1
procedure QuickSort(var List: TStringList; Start, Stop: Integer);
var
Left: Integer;
Right: Integer;
Mid: Integer;
Pivot: integer;
Temp: integer;
begin
Left := Start;
Right := Stop;
Mid := (Start + Stop) div 2;
Pivot := StrToInt(List[mid]);
repeat
while StrToInt(List[Left]) < Pivot do Inc(Left);
while Pivot < StrToInt(List[Right]) do Dec(Right);
if Left <= Right then
begin
Temp := StrToInt(List[Left]);
List[Left] := List[Right]; // Swops the two Strings
List[Right] := IntToStr(Temp);
Inc(Left);
Dec(Right);
end;
until Left > Right;
if Start < Right then QuickSort(List, Start, Right); // Uses
if Left < Stop then QuickSort(List, Left, Stop); // Recursion
end;
而不是调用:
Files.sort;
使用以下内容:
QuickSort(Files, 0, Files.Count - 1);
一个警告是文件内容必须是有效的整数,因为我没有为其他情况添加错误处理。
我使用的 Quicksort 函数是 Torry 的 Delpi 的修改版本:http ://www.swissdelphicenter.ch/torry/showcode.php?id=1916