zoukankan      html  css  js  c++  java
  • 数组的排序

     TAIntArray = array of Integer; //整型数组
    procedure SortIntArray(var InArray: TAIntArray); //对整型数组排序
    var
      lowi, highi: Integer; //数组快速排序
      procedure QuickSortArray(iLo, iHi: Integer);
      var
        Lo, Hi, Mid, value: Integer;
      begin
        Lo := iLo;
        Hi := iHi;
        Mid := InArray[(Lo + Hi) div 2];
        repeat
          while InArray[Lo] < Mid do
            Inc(Lo);
          while InArray[Hi] > Mid do
            Dec(Hi);
          if Lo <= Hi then begin
            value := InArray[Hi];
            InArray[Hi] := InArray[Lo];
            InArray[Lo] := value;
            Inc(Lo);
            Dec(Hi);
          end;
        until Lo > Hi;
        if Hi > iLo then
          QuickSortArray(iLo, Hi);
        if Lo < iHi then
          QuickSortArray(Lo, iHi);
      end;
    begin
      lowi := Low(InArray);
      highi := High(InArray);
      if highi > -1 then //不为空的数组
        QuickSortArray(lowi, highi);
    end;
    //结构体数组
    TRecordNode = record
        XXH: Integer;   
        Sort: Integer;
        Name:string;   
      end;
      TARecordNode = array of TRecordNode;

    procedure SortNode(var ARecordNode: TARecordNode);
    var
      lowi, highi: Integer; //数组快速排序
      procedure QuickSortArray(iLo, iHi: Integer);
      var
        Lo, Hi: Integer;
        SelectedNode: TRecordNode;
      begin
        Lo := iLo;
        Hi := iHi;
        SelectedNode := ARecordNode[(Lo + Hi) div 2];
        repeat
          while ARecordNode[Lo].Sort > SelectedNode.Sort do
            Inc(Lo);
          while ARecordNode[Hi].Sort < SelectedNode.Sort do
            Dec(Hi);
          if Lo <= Hi then begin
            SelectedNode := ARecordNode[Hi];
            ARecordNode[Hi] := ARecordNode[Lo];
            ARecordNode[Lo] := SelectedNode;
            Inc(Lo);
            Dec(Hi);
          end;
        until Lo > Hi;
        if Hi > iLo then
          QuickSortArray(iLo, Hi);
        if Lo < iHi then
          QuickSortArray(Lo, iHi);
      end;
    begin
      lowi := Low(ARecordNode);
      highi := High(ARecordNode);
      if highi > -1 then //不为空的数组
        QuickSortArray(lowi, highi);
    end;


  • 相关阅读:
    P1099 [NOIP2007 提高组] 树网的核
    UVA 数学题选做
    Codeforces 729 Div.2
    P1600 [NOIP2016 提高组] 天天爱跑步
    CF1106F Lunar New Year and a Recursive Sequence
    P6091 【模板】原根
    P4774 [NOI2018] 屠龙勇士
    P1106 删数问题
    P1209 [USACO1.3]修理牛棚 Barn Repair
    网络(network)
  • 原文地址:https://www.cnblogs.com/luckForever/p/7255303.html
Copyright © 2011-2022 走看看