         4. ஢.

     4.1.  .

     4.1.1.  a[1],  ...,  a[n]  -  楫  ᫠.  ॡ
ந  ᨢ  b[1],  ..., b[n], ᮤঠ騩   ᫠, 
 b[1] <= ... <= b[n].
     砭. । ᥫ a[1]...a[n]   ࠢ.  -
,  ⮡   楫 ᫮ 室  b[1]...b[n] ⮫쪮
 ࠧ, ᪮쪮   a[1]...a[n].

     襭.  ,  ᫠ a[1]..a[n]   b[1]..b[n]
।⠢ ᮡ 砫쭮  筮 祭 ᨢ x. -
  "a   b ᮤঠ     ᫠" 㤥  -
, ᫨   ࠡ    ࠭稬  ⠭
⮢ x.
  ...
  k := 0;
  {k  ⮢ ᨢ x ⠭  ᢮ }
  while k <> n do begin
  | s := k + 1; t := k + 1;
  | {x[s] - 訩 । x[k+1]...x[t] }
  | while t<>n do begin
  | | t := t + 1;
  | | if x[t] < x[s] then begin
  | | | s := t;
  | | end;
  | end;
  | {x[s] - 訩 । x[k+1]..x[n] }
  | ... ⠢ x[s]  x[k+1];
  | k := k + 1;
  end;

     4.1.2.   㣮 襭  ஢, ᯮ饥
ਠ { k ⮢ 㯮冷祭: x[1] <= ... <= x[k]}

     襭.

  k:=1
  { k ⮢ 㯮冷祭}
  while k <> n do begin
  | {k+1-  த  砫,   
  |   饣  }
  | t := k+1;
  | {x[1] <= ... <= x[t-1]  x[t-1], x[t] <= ... <= x[k+1] }
  | while (t > 1) and (x[t] < x[t-1]) do begin
  | | ...  x[t-1]  x[t];
  | | t := t - 1;
  | end;
  end;

     砭. 䥪 ணࠬ:   ࠦ (t  >  1)
஢ઠ x[t] < x[t-1] ॡ 饣 祭 x[0].
       । 襭 ॡ ᫠ ⢨, ய-
쭮 n*n.   䥪⨢ .

     4.2.  浪 n log n.

     4.2.1. ।  ஢, ᫮ ⢨ -
ண  뫮    浪  n  log  n,      ॢ室 
C*n*log(n)  ண C    n.

      ।  襭.

     襭 1. (஢ ᫨ﭨ).
       k  -  ⥫쭮  楫  ᫮.  쥬  ᨢ
x[1]..x[n]    १    k.  (  - x[1]..x[k], ⥬
x[k+1]..x[2k]  ..) ᫥ १ 㤥 ,  ᫨  n
    k.  ᨢ k-㯮冷祭, ᫨  
 १ 㯮冷祭.  ᨢ 1-㯮冷祭. ᫨ ᨢ
k-㯮冷祭  n<=k,   㯮冷祭.
       襬,    ८ࠧ  k-㯮冷祭  ᨢ  
2k-㯮冷祭 (   ⮢).   ⮣ ८-
  뢠 ⠪:

  k:=1;
  {ᨢ x  k-㯮冷祭}
  while k < n do begin
  | .. ८ࠧ k-㯮冷祭 ᨢ  2k-㯮冷祭;
  | k := 2 * k;
  end;

     ॡ㥬  ८ࠧ  ⮨  ⮬,  ⭮
"᫨"  㯮冷祭 १      k    
㯮冷祭  १.  楤 ᫨ﭨ (p,q,r: integer)
 p <=q <= r ᫨ १  x[p+1]..x[q]    x[q+1]..x[r]  
㯮冷祭  १ x[p+1]..x[r] ( ࠣ 㣨 ⥩
ᨢ x).
                  p               q               r
            -------|---------------|---------------|-------
                   | 㯮冷祭 | 㯮冷祭 |
            -------|---------------|---------------|-------
                                  |
                                  |
                                  V
            -------|-------------------------------|-------
                   |     㯮冷祭             |
            -------|-------------------------------|-------

 ८ࠧ k-㯮冷祭 ᨢ  2k-㯮冷祭
⢫ ⠪:

  t:=0;
  {t ⭮ 2k  t = n, x[1]..x[t] 
   2k-㯮冷祭; ⮪ ᨢ x  }
  while t + k < n do begin
  | p := t;
  | q := t+k;
  | ...r := min (t+2*k, n); { ᪠  㭪樨 min }
  | ᫨ﭨ (p,q,r);
  | t := r;
  end;

ﭨ ॡ ᯮ⥫쭮 ᨢ    १⮢
᫨ﭨ  -  稬  b. १ p0  q0 稬  -
 ⮢ ⪮,  ᫨ﭨ, s0 -  ᫥
ᠭ    ᨢ b .   蠣 ᫨ﭨ ந-
    ⢨:

        b[s0+1]:=x[p0+1];
        p0:=p0+1;
        s0:=s0+1;

        b[s0+1]:=x[q0+1];
        q0:=q0+1;
        s0:=s0+1;

ࢮ ⢨ (⨥   ࢮ १)   -
   ᫮:
    (1)  १  稫 (p0 < q);
    (2) ன १ 稫 (q0 = r)      稫,  
     [(q0 < r)  (x[p0+1] <= x[q0+1])].
     筮  ண ⢨. ⠪, 砥

  p0 := p; q0 := q; s0 := p;
  while (p0 <> q) or (q0 <> r) do begin
  | if (p0 < q) and ((q0 = r) or ((q0 < r) and
  | |                (x[p0+1] <= x[q0+1]))) then begin
  | | b [s0+1] := x [p0+1];
  | | p0 := p0+1;
  | | s0 := s0+1;
  | end else begin
  | | {(q0 < r) and ((p0 = q) or ((p0<q) and
  | |   (x[p0+1] >= x[q0+1])))}
  | | b [s0+1] := x [q0+1];
  | | q0 := q0 + 1;
  | | s0 := s0 + 1;
  | end;
  end;

(᫨  १  祭   ࠭   
ࠢ,  ⨬  ⢨;  ணࠬ ࠭ ࢮ.)
     ணࠬ    ਢ 䥪: 饭  -
騬 ⠬ ᨢ  ᫥ 㫥᪨ ࠦ.

     襭 2 (஢ ॢ).
     㥬 " 筮 ॢ"  -  ⨭,    ன
᭨  㦮,   室 ५   㣨,  -
 -   㣨  ⠪ :

               .............
                 o  o o  o
                  \/   \/
                   o   o
                    \ /
                     o


     㤥  ,  ५  " 殢  뭮": 
 㦪  뭠    (᫨  㦮    孨).
।    ,  ⢮  ஢
ᥫ  ⥯ ,         冷
楫. 襬  㤠. ⥬   ॢ   
ࠢ:
   ᫮  㦪 =   ᥫ  㦪-뭮
  ᠬ    ୥ ॢ ( 㦪) 㤥 ᠭ -
쭮 ᫮  ᥬ ᨢ.
     묥  㥬  ᨢ    .  
⮣     砫 .   ᤥ,   :
  室  ⮬ ,  ᠭ    ᫮.  
  ,      ᨬ  "᪮筮" 
᪮४㥬    ( ⮣    ᭮  ன
  ).  ⮬ ⠥,    n  ᪮筮-
  ࠢ  n.   ୥  ன  稭 ,
 묠 ,  ᪮筮  ४ ॢ. 
⥯  묥    浪 ⠭,   
୥  ⠭ ᪮筮.
       ⮣ ⬠  㬥஢ 㦮窨 -
 1, 2, ...: 뭮ﬨ 㦪  n  㦪  2*n  
2*n+1. ஡  ⮣ ⬠  ⨬, ᪮
      䥪⨢  ਠ,   ॡ騩 -
⥫쭮 , ஬ 筮 ᫠ ६ (  
㥬 ᨢ).
      㤥 뢠 㥬 ᫠   設  -
ॢ,    ⮫쪮  孥 ஢.  x[1]..x[n] - ᨢ,
騩 ஢. 設 ॢ  ᫠  1  n; 
᫥ x[i]  㤥    ᫥, 饬  設 i. 
 ஢ ⢮ 設 ॢ 㤥  ᮪.
᫮ 設 ⥪饣 ॢ 㤥 ࠭  ६ k. 
ࠧ,     ࠡ ⬠ ᨢ x[1]..x[n] 
  :  x[1]..x[k] ࠭ ᫠  ॢ,    x[k+1]
.. x[n] ࠭ 㦥 ஢  浪 ⠭ 
ᨢ - , 㦥 訥 ᢮  .
       蠣  㤥 묠 ᨬ  
ॢ     ஢ ,  ᢮襥
 १ ᮪饭 ॢ .
     ਬ  ନ. 設 ॢ  -
  1  ⥪饣 祭 ६ k.     設  s
    뭮 2s  2s+1. ᫨   ᫠  k, 
뭮 ; ⠪ 設 뢠 ⮬. ᫨ 2s=k,  -
設 s  ஢  뭠 (2s).
       s  1..k ᬮਬ "ॢ"  ୥   s:
  ᮤন 設 s    ⮬ (뭮, 뭮 -
  .. -   ,    멤   १  1..k).
設  s 㤥 뢠 ॣ୮, ᫨ 饥   ᫮ -
ᨬ  s-ॢ; s-ॢ    ॣ-
,  ᫨     設 ॣ. ( ⭮,  
ࠧ ॣ୮ ⭮ ॢ.)

     奬 ⬠ ⠪:

  k:= n
  ...  1-ॢ ॣ;
  {x[1],..,x[k] <= x[k+1] <= ... <= x[n]; 1-ॢ ॣ୮,
    ⭮, x[1] - ᨬ  । x[1]..x[k]}
  while k <> 1 do begin
  | ...  ⠬ x[1]  x[k];
  | k := k - 1;
  | {x[1]..x[k-1] <= x[k] <=...<= x[n]; 1-ॢ ॣ-
  |   ୮ , ஬, , ᠬ  }
  | ... ⠭ ॣ୮ 1-ॢ 
  end;

 ⢥ ᯮ⥫쭮 楤     楤
⠭ ॣ୮ s-ॢ  ୥.  :

  {s-ॢ ॣ୮ , ஬, , }
  t := s;
  {s-ॢ ॣ୮ , ஬, , 設 t}
  while ((2*t+1 <= k) and (x[2*t+1] > x[t])) or
  |     ((2*t <= k) and (x[2*t] > x[t])) do begin
  | if (2*t+1 <= k) and (x[2*t+1] >= x[2*t]) then begin
  | | ...  x[t]  x[2*t+1];
  | | t := 2*t + 1;
  | end else begin
  | | ...  x[t]  x[2*t];
  | | t := 2*t;
  | end;
  end;

     ⮡ 㡥  ࠢ쭮 ⮩ 楤, ᬮਬ 
 ⥫쭥.   s-ॢ  設, ஬ ࠧ
 設 t, ॣ. ᬮਬ 뭮 設 t.   -
,  ⮬ ᮤঠ 訥 ᫠  ᢮ ॢ.
  ࠧ,    ஫  襣 ᫠  t-ॢ 
⥭ ᫮  ᠬ 設 t  ᫠     뭮. (
ࢮ 砥 設 t ॣୠ,    浪.)   -
 横   ⠪:

  while 襥 ᫮   t,     뭮 do begin
  | if   ࠢ 뭥 then begin
  | |  t   ࠢ 뭮; t:= ࠢ 
  | end else begin {襥 ᫮ -   뭥}
  | |  t    뭮; t:=  
  | end
  end

᫥    設  t  ⠭ ॣ୮ (  
ᨬ쭮 ᫮ t-ॢ).  ਭ訩     
 ⠥ ॣ,  ਭ訩 ⨥     -
.  ⠫ 設 s-ॢ    -
,   ॢ  ⮬ (ࠧ    ॢ
⠢), ⠪  ॣ୮  訫.

     楤  ᯮ짮  ⮣, ⮡ ᤥ
1-ॢ ॣ  砫쭮 ⠤ ஢:

  k := n;
  u := n;
  { s-ॢ  s>u ॣ }
  while u<>0 do begin
  | {u-ॢ ॣ୮ , ஬ ࠧ  }
  | ... ⠭ ॣ୮ u-ॢ  ୥;
  | u:=u-1;
  end;

      襬 楤 ஢  ᪠  (।-
,    n  -  ⠭,  x   ⨯ arr = array [1..n] of
integer).

  procedure sort (var x: arr);
  | var u, k: integer;
  | procedure exchange(i, j: integer);
  | | var tmp: integer;
  | | begin
  | | tmp  := x[i];
  | | x[i] := x[j];
  | | x[j] := tmp;
  | end;
  | procedure restore (s: integer);
  | | var t: integer;
  | | begin
  | | t:=s;
  | | while ((2*t+1 <= k) and (x[2*t+1] > x[t]) ) or
  | | |     ((2*t <= k) and (x[2*t] > x[t])) do begin
  | | | if (2*t+1 <= k) and (x[2*t+1] >= x[2*t]) then begin
  | | | | exchange (t, 2*t+1);
  | | | | t := 2*t+1;
  | | | end else begin
  | | | | exchange (t, 2*t);
  | | | | t := 2*t;
  | | | end;
  | | end;
  | end;
  begin
  | k:=n;
  | u:=n;
  | while u <> 0 do begin
  | | restore (u);
  | | u := u - 1;
  | end;
  | while k <> 1 do begin
  | | exchange (1, k);
  | | k := k - 1;
  | | restore (1);
  | end;
  end;

     ᪮쪮 砭.

     ⮤, ᯮ짮  ஢ ॢ, 뢠 -
  㣨 . (.   6 ( ⨯ )  ࠧ  
।  ਮ⠬.)

     ஢ ᫨ﭨ  ⥬,     ॡ,  ⮡
  㥬  ᨢ  頫  ⨢ . 
᭠砫 ஢ ⠪ ᪨,      
(ਬ,   ॢ),  ⥬ ᫨ 祭 䠩.

       ࠪ᪨   ஢ ⠪: -
  ஢ ᨢ, 롥६ 砩   b,  -
ꥬ ᨢ   : 訥 b, ࠢ  b    訥  b.
(    ਢ    ᨢ.)  ⠫ -
஢    :   ⥬  ᯮᮡ.
६ ࠡ ⮣ ⬠ - 砩 稭;    -
,   ।  ࠡ⠥   C*n*log n.  ࠪ⨪
-    ᠬ . (  ୥  , ਢ 
४ᨢ  ४ᨢ ॠ樨.)

     , ⬥⨬,  ஢  ६ 浪 C*n*log n
  믮   孨 ᡠ஢ ॢ쥢
(.    12),  ணࠬ  ᫮  ⠭ C -
쭮 .

     4.3. ਬ ஢.

     4.3.1.  ⢮  ࠧ  ᥫ  ।  ⮢
 ᨢ. ᫮ ⢨ 浪 n*log n. (  㦥
뫠    ᨢ.)

     襭. ஢ ᫠,  ⥬   ⢮
ࠧ, ᬠਢ  ᨢ  浪.

     4.3.2.  n १ [a[i],  b[i]]    אַ  (i=1..n).
 ᨬ쭮 k,  ண  窠 אַ, -
 k १ ("ᨬ쭮 ᫮ ᫮"). ᫮ ⢨ -
浪 n*log n.

     襭. 冷稬    ࠢ  १ -
  ( ⮬   ⠥  ࠢ , ᯮ-
  ⮩  窥 אַ).   ᫥  -
,    ᫮  ᫮.  祭   㢥稢
᫮  ᫮   1, ࠢ - 㬥蠥. ⬥⨬,  ਬ몠騥
   १ ࠡ뢠 ࠢ쭮: ᭠砫   -
  (ࠢ १),  ⥬ - ࠢ ( १).

     4.3.3.  n 祪  ᪮.  (n-1)- -
ᠬᥪ  , 室 १  
窨.  (ᥤ  १   ࠧ蠥   
אַ.) ᫮ ⢨ 浪 n*log n.

     襭. 冷稬 窨   x-न,      ࠢ
x-न  -  y-न.  ⠪ 浪   ஢-
 .

     4.3.4.   , ᫨    ⮩.

     襭. 쬥 ᠬ   (..   襩
x-न⮩)  ஢        ⠫  窨.
 㯮冷稬  ,  窨    ⨬  -
浪 㢥祭 ﭨ  砫 .

     4.3.5.  n 祪   ᪮.  ந    㪫
  -    㪫 䨣,  ᮤঠ. (
㪫 窨 ਬ १ 窮, ᫨   
,   窠.)  ᫮ 権   n*log n.

    . 冷稬 窨 -    浪,  -
짮   । . ⥬, ᬠਢ -
  ।, 㤥 ந 㪫  㦥 ᬮ७
祪. ( ࠭ 㪫 窨  ᯮ짮 ,
.  6  ⨯ .)


     4.4.  業  ᫠ ࠢ  ஢.

         n  ࠧ     , 
   訢 ।,     ࠭-
     殮. ( ணࠬ᪨ ନ:  
  㭪樨  殮(i,j:1..n):boolean.)    㯮冷
    ,  ᤥ      訢 (맮
㭪樨 "殮").

    㬥, ᫮ 訢   ⮫쪮  ࠭-
   ⬠,    ⮣,   ᯮ -
.  ⬠  ᫮ 訢  襬
ᯮ .

    4.4.1. ,  ᫮  ⬠ ஢ n
   log (n!). (   ᭮ 2,  n!
- ந ᥫ 1..n.)

     襭.    ᫮    d.  
   n!  ᯮ  ⮪㥬 -
 訢 (饭  㭪樨 "殮");    
      ᫥⥫쭮     祬 d 㫥 
.   ࠧ    ᫥⥫쭮  ﬨ,
⮡   ⠫ ࠢ d.  ᠬ    n! ᫥-
⥫쭮⥩    d 㫥  .   ᫥⥫쭮
ࠧ -       ⢥   ࠧ
浪  (   ⢥⮢   ࠢ). 砥, 
2  ⥯ d   n! -   ॡ .

     㣮 ᯮᮡ ᭨   ᠬ  -  ᬮ  ॢ
ਠ⮢,  饥  室 믮 ⬠,  ᫠
 ,  ॢ  d     (2  ⥯  d)
쥢.

       㦤 뢠,    ஢,
ᯮ騩 ⮫쪮 ࠢ ⮢ ᨢ   ⠭-
, ॡ   C*n*log n ⢨, ⠪    
    ⨬.   ஢, ᯮ騩
㣨 樨,  ⢮ ॥.      ਬ-
஢.

     4.4.2.  ᨢ 楫 ᥫ  a[1]..a[n],  祬  
᫠ ⥫   ॢ室 m. ஢  -
ᨢ; ᫮ ⢨ 浪 m+n.

     襭.    ᫠  0  m 뢠, ᪮쪮
ࠧ  砥  ᨢ. ᫥ ⮣ 室 ᨢ 
     浪 ⠭, ᯮ ᢥ-
  ⭮  ᫠.

⬥⨬ ⠪,     ⠢ ᫠   -
,  設⢮ 㣨,  "뢠  㤠 ".

 ⠪ ⮤ ஢,  ஬ ᫥⥫쭮 ஢  
  "  ஢"   ⤥ ⠬.   ⠪
:

     4.4.3.  ᨢ a[1]..a[n] 楫 ᥫ ⠢ -
 ⠪, ⮡  諨 । 묨 (    -
冷    㯯).

     襭.  砫  ᯨ襬  (  ᯮ⥫ ᨢ) 
,  ⮬ -  .

     4.4.4.  ᨢ  n ᥫ  0  (2  ⥯ k)  -
1,     㤥 ᬠਢ  k-⮢ ᫮.
ᯮ ஢ન "i-  ࠢ 0"  "i-  ࠢ 1" -
 ࠢ, ஢  ᫠  ६ 浪 n*k.

     襭. 㥬 ᫠  ᫥  (. ।-
  ),  ⥬  ।᫥  ⠪ .  १
  ஢.  ᠬ , 樥  i   -
,  ᫥ i 蠣   ᫠, ⫨騥 ⮫쪮 
i ᫥ ,   ࠢ쭮 浪.  (ਠ: ᫥ i
蠣 i-⮢  ᥫ   ࠢ쭮 浪.)

         ਬ  m-筮 -
  ᫥   筮.  ⮬  ⠪ ᯮ-
⥫쭠 :

     4.4.5.  n ᥫ  㭪 f, ਭ ( )  -
祭  1..m.  ॡ ⠢ ᫠  ⠪ 浪, ⮡
祭 㭪樨 f  뢠 (࠭  ⮬  冷  
  㯯). ᫮ ⢨ 浪 m+n.
     .  m ᯨ᪮ 㬬୮  n (  ᤥ-
,  ᬮ   6  ⨯ )    i- ᯨ᮪
᫠,   祭 㭪樨 f ࠢ i.  ਠ:  -
      i, ᪮쪮  ᥫ x c f(x)=i, ᫥ 祣
 ।,    㦭 稭 ࠧ  ᫠
 f(x)=i.

     4.5. ⢥ ஢ .

     4.5.1.  쭮  ᫮ (᫮ ࠢ-
   襬 砥) ⬠ ᪠ ᠬ   n
?

     襭. 祢     ਠ⮬  "  ᠬ
    ।  i" ॡ n-1 ࠢ. ⬠
襩 ᫮ .  ⥪  ᫥饣  ᨫ쭮
⢥ত.

     4.5.2. ᯥ   ,    - ᠬ
 । n , ᤥ  n-1  訢.  ,
    .  (   ,  
ᯥ.)

     襭. ࠧ  窠,  訢  -  ﬨ
  . 稬   n 設   祬 n-1 ॡࠬ.
    痢  (     ᫥饣   ॡ
㬥蠥 ᫮    祬  1). ⮬  祣
    ⭮⥫쭮  ᮮ⭮襭 ᮢ    吝
   ,  ᠬ   -  
 .

         ⮩  祩    ।饩  ⮬,  n-1
訢  筮  ⮫쪮  宦 ᠬ -
,    ⮣, ⮡ 㡥,    -
 ᠬ  - ᫨ ।⥫ ⢥ ⥭. ( -
砥 ஢,  ।⥫ ⢥,   㡥
  ࠢ쭮, ᤥ ᥣ n-1 ࠢ:  ࠢ-
  ᫥᫥騬  .)

     4.5.3.  n ࠧ     ᫮ k (  1  
n). ॡ  k-   ,  ᤥ      C*n
訢,  C -  ⠭,    k.

     砭.  ஢    ᤥ   C*n*log n
訢.   ⮩ (㤭)  ਢ   
 ४.

         ⮥ 襭.

     4.5.4.  n    ,   -
  ᠬ  ࠧ  .   ਡ,  -
騩      ।,    ࠧ (
 騩,  殮). ⭮,   ।    
設⢮  ( n/2) .    n 訢-
,       ⮣ 設⢠.

     ।०. ᫨   ,   ࠭-
  ਭ  設.

     . ᫨   ࠧ ,    
 -      宩   設⢮  ⠭
設⢮.

     襭. ணࠬ ᬠਢ   ।, ࠭  
६ i ᫮ ᬮ७ . (⠥  ஭㬥-
஢묨  1  n.)  ⮣ ணࠬ ࠭  "⥪-
饣  "  c      "⭮"  k.   
 ਠ⮬:

   ᫨  ᬮ७  ( ࠬ i+1..n)  -
     k  c- ,    ।  ()
      ⠪  ,    室 ᨢ

砥 ⠪ ணࠬ:

   k:=0; i:=0
   {()}
   while i<>n do begin
   | if k=0 then begin
   | | k:=1; c:=i+1; i:=i+1;
   | end else if i+1-    c- then begin
   | | i:=i+1; k:=k+1;
   | |  {塞 ਠ  }
   | end else begin
   | | i:=i+1; k:=k-1;
   | |  {모뢠  ਠ    }
   | end;
   end;
   ᪮  c- 

砭.  ᪮    ਠ 롮 ⮨
 i:=i+1,   뭥 .

             ⭮-
  ஢.

     4.5.5.   ⭠ ⠡ a[1..n, 1..n]. ⭮,
  ண i ப  ஬ i   ﬨ,
 ⮫  ஬ i -  栬 ( ᪫祭   -
祭  ,  ⮨ ⭮ ).  ⠪ i
(, 祢, ⢥). ᫮ ⢨  ॢ室 C*n.
(⨬,   ⢥  ᫠ ⮢  ⠡).

     . ᬮ a[i][j]  १ "ࠢ" i 
j    ᯮ,  ᠬ 殮  n    
 n ࠢ. ( , 祬,  ⠡   
"࠭⨢".)
