mwtextsort.pas

来自「一个速度很快的文字排序引擎(TextSort engine)」· PAS 代码 · 共 1,482 行 · 第 1/3 页

PAS
1,482
字号
                end;
            end;
        end
      else
        begin
          if MergeCompare(FFileThree.FLeft, FFileFour.FLeft) <= 0 then
            begin
              if MergeCompare(FFileTwo.FLeft, FFileThree.FLeft) <= 0 then
                begin
                  if MergeCompare(FFileTwo.FLeft, FFileFive.FLeft) <= 0 then
                    begin
                      writeln(fOutFile, FFileTwo.fLeft^.Data);
                      FFileTwo.Next;
                    end
                  else
                    begin
                      writeln(fOutFile, FFileFive.fLeft^.Data);
                      FFileFive.Next;
                    end;
                end
              else
                begin
                  if MergeCompare(FFileThree.FLeft, FFileFive.FLeft) <= 0 then
                    begin
                      writeln(fOutFile, FFileThree.fLeft^.Data);
                      FFileThree.Next;
                    end
                  else
                    begin
                      writeln(fOutFile, FFileFive.fLeft^.Data);
                      FFileFive.Next;
                    end;
                end
            end
          else
            begin
              if MergeCompare(FFileTwo.FLeft, FFileFour.FLeft) <= 0 then
                begin
                  if MergeCompare(FFileTwo.FLeft, FFileFive.FLeft) <= 0 then
                    begin
                      writeln(fOutFile, FFileTwo.fLeft^.Data);
                      FFileTwo.Next;
                    end
                  else
                    begin
                      writeln(fOutFile, FFileFive.fLeft^.Data);
                      FFileFive.Next;
                    end;
                end
              else
                begin
                  if MergeCompare(FFileFour.FLeft, FFileFive.FLeft) <= 0 then
                    begin
                      writeln(fOutFile, FFileFour.fLeft^.Data);
                      FFileFour.Next;
                    end
                  else
                    begin
                      writeln(fOutFile, FFileFive.fLeft^.Data);
                      FFileFive.Next;
                    end;
                end;
            end;
        end;
    end;

  while ( FFileOne.Full ) and ( FFileTwo.Full ) and ( FFileThree.Full ) and ( FFileFour.Full ) do
    begin
      if MergeCompare(FFileOne.FLeft, FFileTwo.FLeft) <= 0 then
        begin
          if MergeCompare(FFileThree.FLeft, FFileFour.FLeft) <= 0 then
            begin
              if MergeCompare(FFileOne.FLeft, FFileThree.FLeft) <= 0 then
                begin
                  writeln(fOutFile, FFileOne.fLeft^.Data);
                  FFileOne.Next;
                end
              else
                begin
                  writeln(fOutFile, FFileThree.fLeft^.Data);
                  FFileThree.Next;
                end;
            end
          else
            begin
              if MergeCompare(FFileOne.FLeft, FFileFour.FLeft) <= 0 then
                begin
                  writeln(fOutFile, FFileOne.fLeft^.Data);
                  FFileOne.Next;
                end
              else
                begin
                  writeln(fOutFile, FFileFour.fLeft^.Data);
                  FFileFour.Next;
                end;
            end;
        end
      else
        begin
          if MergeCompare(FFileThree.FLeft, FFileFour.FLeft) <= 0 then
            begin
              if MergeCompare(FFileTwo.FLeft, FFileThree.FLeft) <= 0 then
                begin
                  writeln(fOutFile, FFileTwo.fLeft^.Data);
                  FFileTwo.Next;
                end
              else
                begin
                  writeln(fOutFile, FFileThree.fLeft^.Data);
                  FFileThree.Next;
                end;
            end
          else
            begin
              if MergeCompare(FFileTwo.FLeft, FFileFour.FLeft) <= 0 then
                begin
                  writeln(fOutFile, FFileTwo.fLeft^.Data);
                  FFileTwo.Next;
                end
              else
                begin
                  writeln(fOutFile, FFileFour.fLeft^.Data);
                  FFileFour.Next;
                end;
            end;
        end;
    end;

  while ( FFileOne.Full ) and ( FFileTwo.Full ) and ( FFileThree.Full ) and ( FFileFive.Full ) do
    begin
      if MergeCompare(FFileOne.FLeft, FFileTwo.FLeft) <= 0 then
        begin
          if MergeCompare(FFileThree.FLeft, FFileFive.FLeft) <= 0 then
            begin
              if MergeCompare(FFileOne.FLeft, FFileThree.FLeft) <= 0 then
                begin
                  writeln(fOutFile, FFileOne.fLeft^.Data);
                  FFileOne.Next;
                end
              else
                begin
                  writeln(fOutFile, FFileThree.fLeft^.Data);
                  FFileThree.Next;
                end;
            end
          else
            begin
              if MergeCompare(FFileOne.FLeft, FFileFive.FLeft) <= 0 then
                begin
                  writeln(fOutFile, FFileOne.fLeft^.Data);
                  FFileOne.Next;
                end
              else
                begin
                  writeln(fOutFile, FFileFive.fLeft^.Data);
                  FFileFive.Next;
                end;
            end;
        end
      else
        begin
          if MergeCompare(FFileThree.FLeft, FFileFive.FLeft) <= 0 then
            begin
              if MergeCompare(FFileTwo.FLeft, FFileThree.FLeft) <= 0 then
                begin
                  writeln(fOutFile, FFileTwo.fLeft^.Data);
                  FFileTwo.Next;
                end
              else
                begin
                  writeln(fOutFile, FFileThree.fLeft^.Data);
                  FFileThree.Next;
                end;
            end
          else
            begin
              if MergeCompare(FFileTwo.FLeft, FFileFive.FLeft) <= 0 then
                begin
                  writeln(fOutFile, FFileTwo.fLeft^.Data);
                  FFileTwo.Next;
                end
              else
                begin
                  writeln(fOutFile, FFileFive.fLeft^.Data);
                  FFileFive.Next;
                end;
            end;
        end;
    end;

   while ( FFileOne.Full ) and ( FFileTwo.Full ) and ( FFileFour.Full ) and ( FFileFive.Full ) do
    begin
      if MergeCompare(FFileOne.FLeft, FFileTwo.FLeft) <= 0 then
        begin
          if MergeCompare(FFileFour.FLeft, FFileFive.FLeft) <= 0 then
            begin
              if MergeCompare(FFileOne.FLeft, FFileFour.FLeft) <= 0 then
                begin
                  writeln(fOutFile, FFileOne.fLeft^.Data);
                  FFileOne.Next;
                end
              else
                begin
                  writeln(fOutFile, FFileFour.fLeft^.Data);
                  FFileFour.Next;
                end;
            end
          else
            begin
              if MergeCompare(FFileOne.FLeft, FFileFive.FLeft) <= 0 then
                begin
                  writeln(fOutFile, FFileOne.fLeft^.Data);
                  FFileOne.Next;
                end
              else
                begin
                  writeln(fOutFile, FFileFive.fLeft^.Data);
                  FFileFive.Next;
                end;
            end;
        end
      else
        begin
          if MergeCompare(FFileFour.FLeft, FFileFive.FLeft) <= 0 then
            begin
              if MergeCompare(FFileTwo.FLeft, FFileFour.FLeft) <= 0 then
                begin
                  writeln(fOutFile, FFileTwo.fLeft^.Data);
                  FFileTwo.Next;
                end
              else
                begin
                  writeln(fOutFile, FFileFour.fLeft^.Data);
                  FFileFour.Next;
                end;
            end
          else
            begin
              if MergeCompare(FFileTwo.FLeft, FFileFive.FLeft) <= 0 then
                begin
                  writeln(fOutFile, FFileTwo.fLeft^.Data);
                  FFileTwo.Next;
                end
              else
                begin
                  writeln(fOutFile, FFileFive.fLeft^.Data);
                  FFileFive.Next;
                end;
            end;
        end;
    end;

   while ( FFileOne.Full ) and ( FFileThree.Full ) and ( FFileFour.Full ) and ( FFileFive.Full ) do
    begin
      if MergeCompare(FFileOne.FLeft, FFileThree.FLeft) <= 0 then
        begin
          if MergeCompare(FFileFour.FLeft, FFileFive.FLeft) <= 0 then
            begin
              if MergeCompare(FFileOne.FLeft, FFileFour.FLeft) <= 0 then
                begin
                  writeln(fOutFile, FFileOne.fLeft^.Data);
                  FFileOne.Next;
                end
              else
                begin
                  writeln(fOutFile, FFileFour.fLeft^.Data);
                  FFileFour.Next;
                end;
            end
          else
            begin
              if MergeCompare(FFileOne.FLeft, FFileFive.FLeft) <= 0 then
                begin
                  writeln(fOutFile, FFileOne.fLeft^.Data);
                  FFileOne.Next;
                end
              else
                begin
                  writeln(fOutFile, FFileFive.fLeft^.Data);
                  FFileFive.Next;
                end;
            end;
        end
      else
        begin
          if MergeCompare(FFileFour.FLeft, FFileFive.FLeft) <= 0 then
            begin
              if MergeCompare(FFileThree.FLeft, FFileFour.FLeft) <= 0 then
                begin
                  writeln(fOutFile, FFileThree.fLeft^.Data);
                  FFileThree.Next;
                end
              else
                begin
                  writeln(fOutFile, FFileFour.fLeft^.Data);
                  FFileFour.Next;
                end;
            end
          else
            begin
              if MergeCompare(FFileThree.FLeft, FFileFive.FLeft) <= 0 then
                begin
                  writeln(fOutFile, FFileThree.fLeft^.Data);
                  FFileThree.Next;
                end
              else
                begin
                  writeln(fOutFile, FFileFive.fLeft^.Data);
                  FFileFive.Next;
                end;
            end;
        end;
    end;

   while ( FFileTwo.Full ) and ( FFileThree.Full ) and ( FFileFour.Full ) and ( FFileFive.Full ) do
    begin
      if MergeCompare(FFileTwo.FLeft, FFileThree.FLeft) <= 0 then
        begin
          if MergeCompare(FFileFour.FLeft, FFileFive.FLeft) <= 0 then
            begin
              if MergeCompare(FFileTwo.FLeft, FFileFour.FLeft) <= 0 then
                begin
                  writeln(fOutFile, FFileTwo.fLeft^.Data);
                  FFileTwo.Next;
                end
              else
                begin
                  writeln(fOutFile, FFileFour.fLeft^.Data);
                  FFileFour.Next;
                end;
            end
          else
            begin
              if MergeCompare(FFileTwo.FLeft, FFileFive.FLeft) <= 0 then
                begin
                  writeln(fOutFile, FFileTwo.fLeft^.Data);
                  FFileTwo.Next;
                end
              else
                begin
                  writeln(fOutFile, FFileFive.fLeft^.Data);
                  FFileFive.Next;
                end;
            end;
        end
      else
        begin
          if MergeCompare(FFileFour.FLeft, FFileFive.FLeft) <= 0 then
            begin
              if MergeCompare(FFileThree.FLeft, FFileFour.FLeft) <= 0 then
                begin
                  writeln(fOutFile, FFileThree.fLeft^.Data);
                  FFileThree.Next;
                end
              else
                begin
                  writeln(fOutFile, FFileFour.fLeft^.Data);
                  FFileFour.Next;
                end;
            end
          else
            begin
              if MergeCompare(FFileThree.FLeft, FFileFive.FLeft) <= 0 then
                begin
                  writeln(fOutFile, FFileThree.fLeft^.Data);
                  FFileThree.Next;
                end
              else
                begin
                  writeln(fOutFile, FFileFive.fLeft^.Data);
                  FFileFive.Next;
                end;
            end;
        end;
    end;

  while ( FFileOne.Full ) and ( FFileTwo.Full ) and ( FFileThree.Full ) do
    begin
      if MergeCompare(FFileOne.FLeft, FFileTwo.FLeft) <= 0 then
        begin
          if MergeCompare(FFileOne.FLeft, FFileThree.FLeft) <= 0 then
            begin
              writeln(fOutFile, FFileOne.fLeft^.Data);
              FFileOne.Next;
            end
          else
            begin
              writeln(fOutFile, FFileThree.fLeft^.Data);
              FFileThree.Next;
            end;
        end
      else
        begin
          if MergeCompare(FFileTwo.FLeft, FFileThree.FLeft) <= 0 then
            begin
              writeln(fOutFile, FFileTwo.fLeft^.Data);
              FFileTwo.Next;
            end
          else
            begin
              writeln(fOutFile, FFileThree.fLeft^.Data);
              FFileThree.Next;
            end;
        end;
    end;

  while ( FFileOne.Full ) and ( FFileTwo.Full ) and ( FFileFour.Full ) do
    begin
      if MergeCompare(FFileOne.FLeft, FFileTwo.FLeft) <= 0 then
        begin
          if MergeCompare(FFileOne.FLeft, FFileFour.FLeft) <= 0 then
            begin
              writeln(fOutFile, FFileOne.fLeft^.Data);
              FFileOne.Next;
            end
          else
            begin
              writeln(fOutFile, FFileFour.fLeft^.Data);
              FFileFour.Next;
            end;
        end
      else
        begin
          if MergeCompare(FFileTwo.FLeft, FFileFour.FLeft) <= 0 then
            begin
              writeln(fOutFile, FFileTwo.fLeft^.Data);
              FFileTwo.Next;
            end
          else
            begin
              writeln(fOutFile, FFileFour.fLeft^.Data);
              FFileFour.Next;
            end;
        end;
    end;

  while ( FFileOne.Full ) and ( FFileTwo.Full ) and ( FFileFive.Full ) do
    begin
      if MergeCompare(FFileOne.FLeft, FFileTwo.FLeft) <= 0 then
        begin
          if MergeCompare(FFileOne.FLeft, FFileFive.FLeft) <= 0 then
            begin
              writeln(fOutFile, FFileOne.fLeft^.Data);
              FFileOne.Next;
            end
          else
            begin
              writeln(fOutFile, FFileFive.fLeft^.Data);
              FFileFive.Next;
            end;
        end
      else
        begin
          if MergeCompare(FFileTwo.FLeft, FFileFive.FLeft) <= 0 then
            begin
              writeln(fOutFile, FFileTwo.fLeft^.Data);
              FFileTwo.Next;
            end
          else
            begin
              writeln(fOutFile, FFileFive.fLeft^.Data);
              FFileFive.Next;
            end;
        end;
    end;

  while ( FFileOne.Full ) and ( FFileThree.Full ) and ( FFileFour.Full ) do
    begin
      if MergeCompare(FFileOne.FLeft, FFileThree.FLeft) <= 0 then
        begin
          if MergeCompare(FFileOne.FLeft, FFileFour.FLeft) <= 0 then
            begin
              writeln(fOutFile, FFileOne.fLeft^.Data);
              FFileOne.Next;
            end
          else
            begin
              writeln(fOutFile, FFileFour.fLeft^.Data);
              FFileFour.Next;
            end;
        end
      else
        begin
          if MergeCompare(FFileThree.FLeft, FFileFour.FLeft) <= 0 then
            begin
              writeln(fOutFile, FFileThree.fLeft^.Data);
              FFileThree.Next;
            end
          else
            begin
              writeln(fOutFile, FFileFour.fLeft^.Data);
              FFileFour.Next;
            end;
        end;

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?