���10
������� 2: ��� ��� �� ���������
������ 2.7:
��������
������� ��!��
A. ��������
1. ��������� ���������
1. ���������� ����������
2. ����� ��������� (Binary Search)
2. ��������� ��������
1. ��������� �� ��� ����� (Merge Sort)
2. !������ ��������� (Quick Sort)
". ������
1. # ��$��� Fibonacci
2. ��������� %&� �� ��� �����$�� ��� '������
3. ���������: ��������� �����
�������� ����� ����� ������ ���� �������
��� �"����� ��������
�
�. ��������1. ������� �# $��������
���������������� �������������������������
� � ��� �������� ���(����� �� �� ���)����� ��� ���� ��� ����� ���!
� %�� � � ��������� (� � �� ���&�) '�� ��� ���� �� ���& ��� ����� �� , �� �����(���
�������� ���)����� (���&��� "� �������� �������).
� � ��� ���&� � � ������� �� ��������� �&�� '�! "��� ��, �&) ���� ���������(����
'������ '�� ��&(���� ������� ��!
� � ��!�� #�� '����� ��:
� �� '������ �� ��� *�� ��! �� ���! n ��&(��� ) :
� �� � � � � � � � � � � � �� � �
� '.". #"���� �� � � �� � � � � �� � � � � � � � � � � � � � � � � � � �.�.�.
� �� '������ �� ��&(��� )����� �� ������� �� ) �+� :
� �� � � � � � � � �� � � �
� �� � �, �� � � �
�. ��������1. ������� �# $�������� 1. ,'�� ��� ������� ��!
���������������� �������������������������
��������� factorial
������
n,res: INTEGER;
������ factorial(n): INTEGER
������
����
n: INTEGER;
����
factorial: INTEGER;
������
y:INTEGER;
����
��� (n=1) ����
factorial:=1;
�����
y:=factorial(n-1);
factorial:=n*y;
���-����
����- ������
����
� ���(EOLN, "��� �� n: ");
�����(n);
res:=factorial(n);
� ���(n,"!=",res);
����
�. ��������1. ������� �# $�������� 1. ,'�� ��� ������� ��!
���������������� �������������������������
� $��� �'�� ��� �&� ������� �� ��������� , ���� ������� �� ���� #"� �� �� � �� ��
"��� ��� �����.
� � ��!�� ') ��#"� � ���� factorial(3):
� -��& ��� factorial(2):
� -��& ��� factorial(1):
������ factorial(n): INTEGER
����
��� (n=1) ����
factorial:=1;
�����
y:=factorial(n-1);
factorial:=n*y;
���-����
����- ������
n
…
* ���
��� fact(3)
3
y
n
* ���
��� fact(3)
3
y
* ���
��� fact(2)
n y
2
n
* ���
��� fact(3)
3
y
* ���
��� fact(2)
n y
2
* ���
��� fact(1)
n y
1
�. ��������1. ������� �# $�������� 1. ,'�� ��� ������� ��!
��������������� �������������������������
� H factorial(1) �' ���#*� 1:
� � factorial(2) �'�����!� �� 1 ��� y
� #'� �� �' ���#*� 2*1.
� � factorial(2) �'�����!� �� 1 ��� y
� #'� �� �' ���#*� 3*2
������ factorial(n): INTEGER
����
��� (n=1) ����
factorial:=1;
�����
y:=factorial(n-1);
factorial:=n*y;
���-����
����- ������
n
* ���
��� fact(3)
3
y
* ���
��� fact(2)
n y
2
* ���
��� fact(1)
n y
1 1
1
n
* ���
��� fact(3)
3
y
* ���
��� fact(2)
n y
2
2
1
n
* ���
��� fact(3)
3
y
6
2
main
�. ��������1. ������� �# $�������� 1. ,'�� ��� ������� ��!
���������������� �������������������������
� . � �� �'� ���&����� � ������� �# ���� '�� &����� '��� ���� �&� '�������� �'��
���� ������� �� ���� ��� "&(��� &� ��+ �����.
� �� ��� ���'� ���� �'���!�� �� '�������������� ������ ����'� �� �� ��� ���#��� ���
������� ��! ��� ��:
������ factorial(n): INTEGER
����
��� (n=1) ����
factorial:=1;
�����
y:=factorial(n-1);
factorial:=n*y;
���-����
����- ������
���� factorial(3)
(3=1) ���
y:=factorial(2)
���� factorial(2)
(2=1) ���
y:=factorial(1)
���� factorial(1)
(1=1) ���
������� �� 1
y=1
������� �� 2*1=2
y=2
������� �� 3*2=6
�. ��������1. ������� �# $�������� 2. ���� �� ���(����� (Binary Search)
!��������������� �������������������������
� -�� �� '����� �� ���&���� '�� �'���& �� ��'� ���& ������� �� �&�� � �����
��������� (Binary Search).
� � ��� ��� '�� �&���� �� ��'� �&�� �� �'����/� ���� '&���� , ���� �'���& ��
���� ���')��& �� ��������.
� $��'� �� ���� �� ���(����� �� �������� ��� ��� "�&�� x �� #��� ��+ �����#�� �� �!+����
�� �� '&����:
� �� �� ����&� ��� "�&� �&�� �� x, �� ��� "�&� 0�#����!
� �� �� x �&�� � ������� �'� �� ����&� ��� "�&� ���� ������� �� /�"�� ��� ������ ���
'&���� �'� ��� ��"� �#"� �� ����&� ��� "�&�
� �� �� x �&�� ���!���� �'� �� ����&� ��� "�&� ���� ������� �� /�"�� ��� ������ ���
'&���� �'� �� ����&� ��� "�&� �#"� �� �#�
�. ��������1. ������� �# $�������� 2. ���� �� ���(����� (Binary Search)
"��������������� �������������������������
� �&� ��'�&��� �� /�������� ��� ���&���� (�� ��������) �&�� � �������:
������ binary_search(PIN,x,start,finish): BOOLEAN
������…
������
check:BOOLEAN;
middle:INTEGER;
����
��� (start>finish) ����
check:=FALSE;
�����
middle:=(start+finish) DIV 2;
��� (x=PIN[middle]) ����
check:=TRUE;
�����
��� (x>PIN[middle]) ����
check:=binary_search(PIN,x,middle+1,finish);
�����
check:=binary_search(PIN,x,start,middle-1);
���-����
���-����
���-����
binary_search:=check;
����- ������
�. ��������1. ������� �# $�������� 2. ���� �� ���(����� (Binary Search)
����������������� �������������������������
� �����!�� ��� ��� ��� /�"����� �� ��� "�&� 11 ���� '&����:
� -���: BinarySearch(A,11,1,15): middle=(1+15) div 2=8. x<A[middle]
� ������� �� -���: BinarySearch(A,11,1,7) : middle=(1+7) div 2=4 x>A[middle]
� ������� �� -���: BinarySearch(A,11,5,7) : middle=(5+7) div 2=6 x<A[middle]
� ������� �� -���: BinarySearch(A,11,5,5) : middle=(5+5) div 2=5 x=A[middle]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
2 3 5 7 11 13 17 21 23 27 31 33 37 41 43
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
2 3 5 7 11 13 17 21 23 27 31 33 37 41 43
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
2 3 5 7 11 13 17 21 23 27 31 33 37 41 43
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
2 3 5 7 11 13 17 21 23 27 31 33 37 41 43
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
2 3 5 7 11 13 17 21 23 27 31 33 37 41 43
start
start
start
start=finish
finish
finish
finish
�. ��������1. ������� �# $�������� 2. ���� �� ���(����� (Binary Search)
����������������� �������������������������
� +����: -����������� #�� '������� '�� �� ����� ��!� ��� "���� �� ���� ��
���(����� �� '����� ���� #�� '����� �� ���#��� � ��� '&���� �=[1 3 5 7 9]
���(������ �� ��� "�&� 7
� $���&)��: $�� ����&� ���� ���&����� �� ��������� '���� � �!� �*����# (�� ���&
Fibonacci �� ��� ��� ����&��) �� #'� �� �� '��")������ �� ��� ��)�&� ��� �������� .
�. ��������2. ������� �# � �� ���&� 1. ��+ ������ �� $�"������ (Merge Sort)
����������������� �������������������������
� 1�� ����� ��� �� ��� ��� ��+ ������ '�� �� ��� � �����& �� ��������, �&�� �
��������� �� ��� ����� (Merge Sort).
� � ��� ��� � �����& ) �+� :
� ��+ ����& �� �� ����� ������ ��� '&����
� ��+ ����& �� ��+& ������ ��� '&����
� $�")��!� �� �!� ��+ �����#�� '#�� ������ � �� �&� ��+ �����#�� ������&�
� � ��+ ������ ���� ������ �! &���� �� ������� �� ���� �� &� � � �� ���&� .
�. ��������2. ������� �# � �� ���&� 1. ��+ ������ �� $�"������ (Merge Sort)
����������������� �������������������������
� � ��'�&��� �� /�������� �&�� � �������:
������� merge_sort(%PIN,start,finish)
������
����
PIN: ARRAY[1..MAX_N] OF INTEGER;
start,finish: INTEGER;
����
PIN: ARRAY[1..MAX_N] OF INTEGER;
������
middle: INTEGER;
����
��� (start<finish) ����
��� (start+1=finish) ���� /* 2 ����!�"# */
��� (PIN[start]>PIN[finish]) ����
������� swap(%PIN[start],%PIN[finish]);
���-����
����� /* ������$���# #�$ 2 ����!�"# */
middle:=(start+finish) DIV 2;
��������� merge_sort(%PIN,start,middle);
��������� merge_sort(%PIN,middle+1,finish);
��������� merge(%PIN,start,finish);
���-����
���-����
����-�������
����������������� �������������������������
� ������� �� -��� MergeSort(�,1,16)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
18 7 4 11 9 20 6 1 22 19 14 5 2 9 10 13
�. ��������2. ������� �# � �� ���&� 1. ��+ ������ �� $�"������ (Merge Sort)
����������������� �������������������������
� ������� �� -��� MergeSort(�,1,16)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
18 7 4 11 9 20 6 1 22 19 14 5 2 3 10 13
1 2 3 4 5 6 7 8
18 7 4 11 9 20 6 1
9 10 11 12 13 14 15 16
22 19 14 5 2 3 10 13
�. ��������2. ������� �# � �� ���&� 1. ��+ ������ �� $�"������ (Merge Sort)
� ��������������� �������������������������
� ������� �� -��� (A,1,8)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
18 7 4 11 9 20 6 1 22 19 14 5 2 3 10 13
1 2 3 4 5 6 7 8
18 7 4 11 9 20 6 1
9 10 11 12 13 14 15 16
22 19 14 5 2 3 10 13
1 2 3 4
18 7 4 11
5 6 7 8
9 20 6 1
�. ��������2. ������� �# � �� ���&� 1. ��+ ������ �� $�"������ (Merge Sort)
����������������� �������������������������
� ������� �� -��� (A,1,4)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
18 7 4 11 9 20 6 1 22 19 14 5 2 3 10 13
1 2 3 4 5 6 7 8
18 7 4 11 9 20 6 1
9 10 11 12 13 14 15 16
22 19 14 5 2 3 10 13
1 2 3 4
18 7 4 11
5 6 7 8
9 20 6 1
1 2
18 7
3 4
4 11
�. ��������2. ������� �# � �� ���&� 1. ��+ ������ �� $�"������ (Merge Sort)
�!��������������� �������������������������
� ������� �� -��� (A,1,2): ��+ ������ ��� �'�'&����
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
18 7 4 11 9 20 6 1 22 19 14 5 2 3 10 13
1 2 3 4 5 6 7 8
18 7 4 11 9 20 6 1
9 10 11 12 13 14 15 16
22 19 14 5 2 3 10 13
1 2 3 4
18 7 4 11
5 6 7 8
9 20 6 1
1 2
7 18
3 4
4 11
�. ��������2. ������� �# � �� ���&� 1. ��+ ������ �� $�"������ (Merge Sort)
�"��������������� �������������������������
� ������� �� -��� (A,3,4): ��+ ������ ��� �'�'&����
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
18 7 4 11 9 20 6 1 22 19 14 5 2 3 10 13
1 2 3 4 5 6 7 8
18 7 4 11 9 20 6 1
9 10 11 12 13 14 15 16
22 19 14 5 2 3 10 13
1 2 3 4
18 7 4 11
5 6 7 8
9 20 6 1
1 2
7 18
3 4
4 11
�. ��������2. ������� �# � �� ���&� 1. ��+ ������ �� $�"������ (Merge Sort)
����������������� �������������������������
� ������� �� -��� (A,1,4): $�"������ �)� �!� �'�' ���)�
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
18 7 4 11 9 20 6 1 22 19 14 5 2 3 10 13
1 2 3 4 5 6 7 8
18 7 4 11 9 20 6 1
9 10 11 12 13 14 15 16
22 19 14 5 2 3 10 13
1 2 3 4
4 7 11 18
5 6 7 8
9 20 6 1
1 2
7 18
3 4
4 11
�. ��������2. ������� �# � �� ���&� 1. ��+ ������ �� $�"������ (Merge Sort)
����������������� �������������������������
� ������� �� -��� (A,5,8)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
18 7 4 11 9 20 6 1 22 19 14 5 2 3 10 13
1 2 3 4 5 6 7 8
18 7 4 11 9 20 6 1
9 10 11 12 13 14 15 16
22 19 14 5 2 3 10 13
1 2 3 4
4 7 11 18
5 6 7 8
9 20 6 1
1 2
7 18
3 4
4 11
5 6
9 20
7 8
6 1
�. ��������2. ������� �# � �� ���&� 1. ��+ ������ �� $�"������ (Merge Sort)
����������������� �������������������������
� ������� �� -��� (A,5,6): ��+ ������ ��� �'�'&����
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
18 7 4 11 9 20 6 1 22 19 14 5 2 3 10 13
1 2 3 4 5 6 7 8
18 7 4 11 9 20 6 1
9 10 11 12 13 14 15 16
22 19 14 5 2 3 10 13
1 2 3 4
4 7 11 18
5 6 7 8
9 20 6 1
1 2
7 18
3 4
4 11
5 6
9 20
7 8
6 1
�. ��������2. ������� �# � �� ���&� 1. ��+ ������ �� $�"������ (Merge Sort)
����������������� �������������������������
� ������� �� -��� (A,7,8): ��+ ������ ��� �'�'&����
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
18 7 4 11 9 20 6 1 22 19 14 5 2 3 10 13
1 2 3 4 5 6 7 8
18 7 4 11 9 20 6 1
9 10 11 12 13 14 15 16
22 19 14 5 2 3 10 13
1 2 3 4
4 7 11 18
5 6 7 8
9 20 6 1
1 2
7 18
3 4
4 11
5 6
9 20
7 8
1 6
�. ��������2. ������� �# � �� ���&� 1. ��+ ������ �� $�"������ (Merge Sort)
����������������� �������������������������
� ������� �� -��� (A,5,8): $�"������ �)� �!� �'�' ���)�
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
18 7 4 11 9 20 6 1 22 19 14 5 2 3 10 13
1 2 3 4 5 6 7 8
18 7 4 11 9 20 6 1
9 10 11 12 13 14 15 16
22 19 14 5 2 3 10 13
1 2 3 4
4 7 11 18
5 6 7 8
1 6 9 20
1 2
7 18
3 4
4 11
5 6
9 20
7 8
1 6
�. ��������2. ������� �# � �� ���&� 1. ��+ ������ �� $�"������ (Merge Sort)
����������������� �������������������������
� ������� �� -��� (A,1,8): $�"������ �)� �!� �'�' ���)�
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
18 7 4 11 9 20 6 1 22 19 14 5 2 3 10 13
1 2 3 4 5 6 7 8
1 4 6 7 9 11 18 20
9 10 11 12 13 14 15 16
22 19 14 5 2 3 10 13
1 2 3 4
4 7 11 18
5 6 7 8
1 6 9 20
1 2
7 18
3 4
4 11
5 6
9 20
7 8
1 6
�. ��������2. ������� �# � �� ���&� 1. ��+ ������ �� $�"������ (Merge Sort)
� ��������������� �������������������������
� ���&��� "� �� &���� �� � ������� �# ���� ��� (9,16)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
18 7 4 11 9 20 6 1 22 19 14 5 2 3 10 13
1 2 3 4 5 6 7 8
1 4 6 7 9 11 18 20
9 10 11 12 13 14 15 16
2 3 5 10 13 14 19 22
1 2 3 4
4 7 11 18
5 6 7 8
1 6 9 20
1 2
7 18
3 4
4 11
5 6
9 20
7 8
1 6
9 10 11 12
5 14 19 22
13 14 15 16
2 3 10 13
9 10
19 22
11 12
5 14
13 14
2 3
15 16
10 13
�. ��������2. ������� �# � �� ���&� 1. ��+ ������ �� $�"������ (Merge Sort)
����������������� �������������������������
� ������� �� -��� (A,1,16): $�"������ �)� �!� �'�' ���)�
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
1 2 3 4 5 6 7 9 10 11 13 14 18 19 20 22
1 2 3 4 5 6 7 8
1 4 6 7 9 11 18 20
9 10 11 12 13 14 15 16
2 3 5 10 13 14 19 22
1 2 3 4
4 7 11 18
5 6 7 8
1 6 9 20
1 2
7 18
3 4
4 11
5 6
9 20
7 8
1 6
9 10 11 12
5 14 19 22
13 14 15 16
2 3 10 13
9 10
19 22
11 12
5 14
13 14
2 3
15 16
10 13
�. ��������2. ������� �# � �� ���&� 1. ��+ ������ �� $�"������ (Merge Sort)
�. ��������2. ������� �# � �� ���&� 1. ��+ ������ �� $�"������ (Merge Sort)
�!��������������� �������������������������
� � � �� ���&� merge ����!� ) �+� :
� $����� ��� �!� '&���� �����"���� �'� �� ����� '�� �� ��+ �.
� $���&�� �� �!� ��#"���� ��� "�&� �)� ' ���)�
� �' #� �� � ������� �� �� 0�(� ���� �'����� �#�� �� ��+ �����#�� ������&�
� 2��� �+������!� �� ��� "�&� ��� #�� �'� ��� �!� '&���� , 0�(���� ��� ��� "�&� �'#�� ���
�'� ��� �� '&���� ��� �#� �� ��+ �����#�� ������&� .
� $�� '����� �� 0#'���� ��� �� 0����� �� ��� ������# '�� "��� ��'� �!��� .
�"��������������� �������������������������
�. ��������2. ������� �# � �� ���&� 1. ��+ ������ �� $�"������ (Merge Sort)
����������������� �������������������������
� �&� ��'�&��� �� merge �&�� � �������:
������� merge(%PIN,start,finish)
������
����
PIN: ARRAY[1..MAX_N] OF INTEGER;
start,finish: INTEGER;
����
PIN: ARRAY[1..MAX_N] OF INTEGER;
������
C: ARRAY[1..MAX_N] OF INTEGER;
middle: INTEGER;
i,j,k:INTEGER;
n: INTEGER;
m: INTEGER;
����
middle:=(start+finish) DIV 2;
/* 1�% �"&#'#% PIN[start...middle]*/
i:=start;
n:=middle;
/* 2�% �"&#'#% PIN[middle+1...finish]*/
j:=middle+1;
m:=finish;
/* C: �()!*&�(+�&�% �"&#'#% */
k:=1; (�(&�!",��#�…)
�. ��������2. ������� �# � �� ���&� 1. ��+ ������ �� $�"������ (Merge Sort)
����������������� �������������������������
� �&� ��'�&��� �� merge �&�� � �������:
(�(&�!��#…)
/* 1. ()!�&�(�- �*& ./� ��&0'*& */
���� (i<=n AND j<=m) ���������
��� (PIN[i]<PIN[j]) ����
C[k]:=PIN[i];
k:=k+1;
i:=i+1;
�����
C[k]:=PIN[j];
k:=k+1;
j:=j+1;
���-����
����-����
(�(&�!",��#�…)
�. ��������2. ������� �# � �� ���&� 1. ��+ ������ �� $�"������ (Merge Sort)
����������������� �������������������������
/* 2. �&��)�# 1 ��( �"&#'# ��( «�������/�� ��� ��2�% ��( �()!*&�(+�&�( �"&#'# */
��� (i=n+1) ���� /* �3#&�214-'� � 1�% �"&#'#% */
���� (j<=m) ���������
C[k]:=PIN[j];
k:=k+1;
j:=j+1;
����-����
����� /* �3#&�214-'� � 2�% �"&#'#% */
���� (i<=n) ���������
C[k]:=PIN[i];
k:=k+1;
i:=i+1;
����-����
���-����
/* 3. �&��)�# 1 ��( C ���& PIN */
k:=1;
i:=start;
���� (i<=finish) ���������
PIN[i]:=C[k];
i:=i+1;
k:=k+1;
����-����
����-�������
�. ��������2. ������� �# � �� ���&� 1. ��+ ������ �� $�"������ (Merge Sort)
����������������� �������������������������
� +����: -����������� #�� '������� '�� �� ����� ��!� ��� "���� �� merge sort ��
'����� ���� #�� '����� �� ���#��� � ��� '&���� �=[6 2 4 1 8 10 11 12]
�. ��������2. ������� �# � �� ���&� 2. .����� ��+ ������ (Quick Sort)
����������������� �������������������������
� ������&� ��� ��� ��+ ������ '�� �� ���������� (�� � �����& �� ��������), �&�� �
!������ ��������� (Quick Sort).
� � ��� ��� � �����& ) �+� :
� �' #� #�� $�� "�&� ��� �&���� (���� $�� "�&� – ��� �� ��� "�&� '�� �&�� ���� '����
�#��)
� 3)�&(� ��� '&���� �� �!� �#��:
� �� ��� "�&� '�� �&�� � ������� ��� ����! ��� "�&��
� �� ��� "�&� '�� �&�� ���!���� � &�� ��� ����! ��� "�&��
� �'�����0��� ������� �� ���� �!� �'�'&���� '�� '��#��/��.
�. ��������2. ������� �# � �� ���&� 2. .����� ��+ ������ (Quick Sort)
����������������� �������������������������
� � ��'�&��� �� /�������� �&�� � �������:
������� quick_sort(%PIN,start,finish)
������
����
PIN: ARRAY[1..MAX_N] OF INTEGER;
start,finish: INTEGER;
����
PIN: ARRAY[1..MAX_N] OF INTEGER;
����
��� (start<finish) ����
pos=partition(%PIN,start,finish); /* �#+����- ��( �"&#'# */
��������� quick_sort(%PIN,start,pos); /* �&#.��+1 ���& #������$ (���"&#'# */
��������� quick_sort(%PIN,pos+1,finish);/* �&#.��+1 ���& .�3�$ (���"&#'# */
���-����
����-�������
� ��� ��� ��+ ������ QuickSort (2.������ �� ���#��� )
� ��������������� �������������������������
1 2 3 4 5 6 7 8 9 10
18 7 4 11 9 20 6 1 22 19
1 7 4 11 9 6 20 18 22 19
1 2 3 4 5 6
1 7 4 11 9 6
1 7 4 11 9 6
7 8 9 10
20 18 22 19
19 18 22 20
2 3 4 5 6
7 4 11 9 6
6 4 11 9 7
2 3
6 4
4 6
4 5 6
11 9 7
7 9 11
2
4
4
3
6
6
4 5
11 9
7 9
6
11
11
4
7
7
5
9
9
1
1
1
1
1
2
4
3
6
4
7
5
9
6
11
7
18
7 8
19 18
18 19
9 10
22 20
20 22
7
18
18
8
19
19
9
20
20
10
22
22
8
19
9
20
10
22
8
19
�. ��������2. ������� �# � �� ���&� 2. .����� ��+ ������ (Quick Sort)
����������������� �������������������������
� � � ��#� �� �)� ��� "�&)� ��� � ������� �� ���!���� � &�� �'���& �� &�� �� '��!
���'�� :
� �.". #�� �'� ���'� �&�� �� "��� ��'� ������ #��� 0����� �� '&���� '�� ��
0�(���� ��� �� ����� �� � ������� ��� "�&� �� ��� ��+ � �� ���!���� ��� "�&� ���
����!.
� 4����� ���& �� ���������� #��� ���'� � ��#� �� , '�� ���*#���� ) �"��� ��� Hoare:
� $�������� ��� '&���� �'� �� ����� /�"����� � #�� ��� "�&� '�� �&�� ���!���� (�
&��) ��� ����!
� $�������� ��� '&���� �'� ��+ � /�"����� � #�� ��� "�&� '�� �&�� � ������� (� &��)
��� ����!
� ����������� �� �!� ��� "�&� �� �'�����0������ �#"� �� &�� � ")� ��� �)�
��� "�&)�.
� 5� ���������� �� �"��� ��� Hoare �� '�����&���� (�'����� � �*��� �)
1 2
6 4
4 6
�. ��������2. ������� �# � �� ���&� 2. .����� ��+ ������ (Quick Sort)
�!��������������� �������������������������
� ������ �� ���#��� �� partition:
� ������&���� ���#��� �� 2 ��� "�&�: �� �� 1 ��� "� �:
1 2 3 4 5 6 7 8 9 10
18 7 4 11 9 20 6 1 22 19
i=1 j=8
1 2 3 4 5 6 7 8 9 10
18 7 4 11 9 20 6 1 22 19
1 18 22 19
1 2 3 4 5 6 7 8 9 10
18 7 4 11 9 20 6 1 22 19
1 18 22 19i=6 j=7
1 2 3 4 5 6 7 8 9 10
1 7 4 11 8 6 20 18 22 19
1 2 3 4 5 6 7 8 9 10
18 7 4 11 9 20 6 1 22 19
1 7 4 11 8 6 20 18 22 19
i=7j=6
1 2 3 4 5 6 7 8 9 10
1 7 4 11 8 6 20 18 22 19
1 2
6 4
i=1
j=1 i=2
1 2
4 6
1 2
4 6
i=1
1 2
4 6
j=2
j=1
1
6
i=1
j=1
����������
�. ��������2. ������� �# � �� ���&� 2. .����� ��+ ������ (Quick Sort)
�"��������������� �������������������������
� � ��'�&��� �� partition �� �� �"��� ��� Hoare �� /�������� �&�� � �������:
������
partition(%PIN,start,finish):INTEGER
������
����
PIN: ARRAY[1..MAX_N] OF INTEGER;
start,finish: INTEGER;
����
PIN: ARRAY[1..MAX_N] OF INTEGER;
partition: INTEGER;
������
pivot,i,j: INTEGER;
stop: BOOLEAN;
����
pivot:=PIN[start];
i:=start-1;
j:=finish+1;
stop:=FALSE;
���� (stop=FALSE) ���������
���������
j:=j-1;
����� (PIN[j]<=pivot)
���������
i:=i+1;
����� (PIN[i]>=pivot)
��� (i<j) ����
������� swap(%PIN[i],%PIN[j]);
�����
stop:=TRUE;
partition:=j;
���-����
����-����
����- ������
�. ��������2. ������� �# � �� ���&� 2. .����� ��+ ������ (Quick Sort)
����������������� �������������������������
� +����: -����������� #�� '������� '�� �� ����� ��!� ��� "���� �� merge sort ��
'����� ���� #�� '����� �� ���#��� � ��� '&���� �=[6 2 4 1 8 10 11 12]
6. ������ �*����� 1 (��������: � ������&� FIbonacci)
����������������� �������������������������
� � ������&� fibonacci ��&(��� ) :
� Fn=Fn-1+Fn-2, � n>2
� F2=1
� F1=1
� . � '����� �� #"���� F1=1,F2=1,F3=2,F4=3,F5=5,F6=8 �.�.�.
� ��&��� ��� ��������� fibonacci(n) '�� �#"��� ) �� ��� #��� *�� �� �� �' ���#*� �� n-
���� fibonacci.
� 1'� �� ������������ #��� ��� ��� '�� � �0�(� �'� ��� "����� #��� ��#�� � ��
�'��&(� �� �' ���#*� ��� �� ��� fibonacci ��� �� ���! '�� � ���� � "����� .
6. ������ �*����� 2 (��������: �-� �� ��� ��� ��� ��� ����&��)
����������������� �������������������������
� O ��� ��� ��� ����&�� � ��� �!���� ��� �# ���� -� ��! � � �#�� �!� (*�� ���)
�� ����:
� 7�� �� �� #�� (�!� *�� ��� �� �"����&(� #�� �#� (���� �� ��� � ������� �� ��� ��
��� � �*��� ��� � �������� �'� ��� ���!���� �� ���.
� � � �� ���&� �'�����0����� �)����� � �� ���& &���� &�� . � �� ��� ���� �&�� �
�-� �)� ��" ��� �� ����.
� ������� �� � �-�(a,b) �'�� a,b �&�� *�� ��&:
� �&�� &�� �� a, �� a=b
� �&�� &�� �� �-�(a,b-a), �� a<b
� �&�� &�� �� �-�(a-b,b), � �
� -����������� #��� ��� ��� '�� �� ��'� �& �� �&� ������� �� ��������� ��� �'�� ���
��� �-� �� �� (���� �'� �� "����� �� � ��� ��� �!� *�� ��! , �� ���� ������ ����
�� ��������� �� �� ��'��� ��� �-� �)� �� ����.
6. ������ �*����� 3 (��������: ��+ ������ �&����)
����������������� �������������������������
� �'����&���� �� '������� �� ��+ ������ ' ���)� ���� �� ���)������ �� ���
���&���� �� ��+ ������ �� ��"������ (Merge Sort) �� �� ����� ��+ ������
(Quick Sort).