0
我需要從從TList端口排序過程磨片有這樣的代碼,即可獲得一個PHP數組移植德爾福TList.Sort到PHP
procedure TList.Sort(Compare: TListSortCompare);
begin
if (FList <> nil) and (Count > 0) then
QuickSort(FList, 0, Count - 1, Compare);
end;
,並通過快速排序導航:
procedure QuickSort(SortList: PPointerList; L, R: Integer;
SCompare: TListSortCompare);
var
I, J: Integer;
P, T: Pointer;
begin
repeat
I := L;
J := R;
P := SortList^[(L + R) shr 1];
repeat
while SCompare(SortList^[I], P) < 0 do
Inc(I);
while SCompare(SortList^[J], P) > 0 do
Dec(J);
if I <= J then
begin
T := SortList^[I];
SortList^[I] := SortList^[J];
SortList^[J] := T;
Inc(I);
Dec(J);
end;
until I > J;
if L < J then
QuickSort(SortList, L, J, SCompare);
L := I;
until I >= R;
end;
我不是理解什麼這個原型意味着:
procedure QuickSort(SortList: PPointerList; L, R: Integer;
SCompare: TListSortCompare);
PPointerList =>行, L,R =>行
SCompare:TListSortCompare ???這是什麼???
TListSortCompare = function (Item1, Item2: Pointer): Integer;
我無法理解此代碼流。
正如你所看到的http://php.net/sort使用»Quicksort的實現 - 但不是相同的代碼流。
您無需移植該代碼。使用PHP內置的['sort'](http://www.php.net/manual/en/function.sort.php) –
但是SCompare的執行方式不一樣:TListSortCompare –
好的,但是不明顯我說你需要一個自定義比較器。無論如何,你真的不想像這樣移植一些重要的東西,如果你需要自定義比較器,'usort'肯定是正確的答案。 –