0

PHP配列を受け取るには、TListからSortプロシージャを移植する必要があります

procedure TList.Sort(Compare: TListSortCompare);
begin
  if (FList <> nil) and (Count > 0) then
    QuickSort(FList, 0, Count - 1, Compare);
end;

そして、このコードがあるQuickSortでナビゲートします:

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 => OK、L、R => OK

SCompare: TListSortCompare ??? これは何ですか???

TListSortCompare = function (Item1, Item2: Pointer): Integer;

このコード フローが理解できません。

ご覧のとおり、 http://php.net/sortは » Quicksort の実装を使用していますが、同じコード フローではありません。

4

1 に答える 1

1

最も近い実装は、コールバックでカスタム関数を使用するPHP ネイティブ関数usort()です。

http://www.php.net/manual/en/function.usort.php

それは私の問題を解決しました。ありがとう!

于 2012-11-19T19:24:18.647 に答える