2012-11-19 55 views
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的實現 - 但不是相同的代碼流。

+1

您無需移植該代碼。使用PHP內置的['sort'](http://www.php.net/manual/en/function.sort.php) –

+0

但是SCompare的執行方式不一樣:TListSortCompare –

+1

好的,但是不明顯我說你需要一個自定義比較器。無論如何,你真的不想像這樣移植一些重要的東西,如果你需要自定義比較器,'usort'肯定是正確的答案。 –

回答