.


:




:

































 

 

 

 


()




- ()

 

 

 

 

 

 

()

2013

..

 

, , .

 

220400

2

20 .

 

 

2013.

 

 

. ..

 

 
 


1

:

1. ;

2. .

 

4 .

 

 

;

, ;

;

.

 

 

 

- , >, <, , . , . , .

, - . , - , .

. , . , . .

, ( ; ; ) . , , .

, , , ( , , , .), , ( , , ) .

, .

, . .

T O ( ) , , .

- , (/ ) .

, (), , 11*n2+19*n*log(n)+3*n+4, n- , T(n2). , , n ( ) .

( n, / ). , .

() ( ) , ( ), , . , T(n2) n , ( - ) 3 32=9 .

, , T(1).

, , , C. .

( ), , , , , . , , :

  • , ;
  • - ;
  • - , .

, , T(n2), T(n*log(n)), T(n). T(n). , , T(n*log(n)). , . , . - .

, , . :

for i:= 1 to N dobegin <__k+1__A[i] ___B> B[k+1]:= A[i];end;

B[k+1] B[k+1]. k A[i] , , , A[i]. , , A[i]. k :

k:= 0;for j:= 1 to N do if (A[i]>A[j])or((A[i]=A[j])and(i>j)) then Inc(k);

, T(n2) ( , n ) O(n) ( ).

2 : . .

A[1], A[2],..., A[i-1], A[i],...,A[n] . A[i] , . , A[i], ( ) , A[i]. A[i], ( - ) . A[i] .

, i=2.

:

for i:= 2 to n dobegin Tmp:= A[i]; j:= i-1; while (A[j]>Tmp)and(j>1) do begin A[j+1]:= A[j]; Dec(j) end; A[j+1]:= Tmp;end;

T(n2), , Tmin(n). , , , . , .

, , . , A[i] . , . ( A[i], , , , ). .

A[i] , , A[i-h], A[i-2h], A[i-3h] , h - . , h- , h, .

, : h, . , h=1.

hi, hi-1, hi-2,..., h1, . , hi+1=3hi+1, h1=1. hm-2, m - , hm n. hm-2 , hm-2 [n/9].

:

Step:= 1;while Step < N div 9 do Step:= Step*3 + 1;Repeat for k:= 1 to Step do begin i:= Step + k; while i <= N do begin x:= A^[i]; j:= i - Step; while (j >= 1) and (A^[j]>x) do begin A^[j + Step]:= A^[j]; Dec(j); end; A^[j + Step]:= x; Inc(i, Step); end; end; Step:= Step div 3;until Step=0;

, , 1,66n1,25 .

A[i+1], A[i+1],..., A[n] A[1], A[2],..., A[i]. . , , .

, . A[i] .

for i:= N downto 2 dobegin MaxIndex:= 1; for j:= 2 to i do if A[j]>A[MaxIndex] then MaxIndex:= j; Tmp:= A[i]; A[i]:= A[MaxIndex]; A[MaxIndex]:= Tmp;end;

T(n2) ( , n ).

- . : . , : ( ), . .

, .

, , , , . Flag - :

for i:= N-1 downto 1 dobegin Flag:= false; for j:= 1 to i do if a[j]>a[j+1] then begin Tmp:= A[j]; A[j]:= A[j+1]; A[j+1]:= Tmp; Flag:= true; end; if not Flag then Break;end;

T(n2) ( , n ) (i, j, Tmp, Flag). Flag T(n).

()

, , .

. , .

, , : , , , - . , ( ). , , .

, :

procedure Sort;procedure QuickSort(a, b: Longint);Var x: Longint; { }begin x:= __;... : 1) A[a]..A[i]; 2) A[i+1]..A[j-1]; 3) A[j]..A[b] if i>a then QuickSort(a, i); if b>j then QuickSort(j, b);end;begin Sort(1, N);end;

- , , , . , , ( , ), : ( , ) :

i:= A[l]; y:= A[(l+r)div 2]; j:= A[r];if i<=y then if y<=j then x:= (l+r)div 2 else if i<=j then x:= r else x:= lelse if y>=j then x:= (l+r)div 2 else if i>=j then x:= r else x:= l;

A[x] , , A[x], A[x], , A[x]. , A[i], A[x], , , - A[j], A[x]. i j, , , A[i] A[j], A[i] A[j].

i:= l; j:= r; x:= A[x];repeat while A[i] < x do Inc(I); while x < A[j] do Dec(j); if i <= j then begin y:= A[i]; A[i]:= A[j]; A[j]:= y; Inc(i); Dec(j); end;until i > j;

. , - , , , , . , QuickSort , ( ) N . N O(N). , QuickSort . O(log(N)).

:

procedure Sort;procedure QuickSort(a, b: Longint);Var x: Longint; { }begin i:= A[l]; y:= A[(l+r)div 2]; j:= A[r]; if i<=y then if y<=j then x:= (l+r)div 2 else if i<=j then x:= r else x:= l else if y>=j then x:= (l+r)div 2 else if i>=j then x:= r else x:= l; i:= l; j:= r; x:= A[x]; repeat while A[i] < x do Inc(i); while x < A[j] do Dec(j); if i <= j then begin y:= A[i]; A[i]:= A[j]; A[j]:= y; Inc(i); Dec(j); end; until i > j; if l-j<i-r then begin if l < j then QuickSort(l, j); if i < r then QuickSort(i, r); end else begin if i < r then Sort(i, r); if l < j then Sort(l, j); end; end;begin QuickSort(1, N);end;

Tmax(N2) ( , ), . T(N*log(N)).

.

1. , , .

2.

 

 

? ?

? ? ?

, ?

 

2

:

.

 

2 .

 

 

, .

;

.

 

// .





:


: 2017-02-25; !; : 512 |


:

:

.
==> ...

1734 - | 1702 -


© 2015-2024 lektsii.org - -

: 0.04 .