More Related Content
More from Dimitris Psounis (20)
ΠΛΗ10 ΜΑΘΗΜΑ 2.7 (ΕΚΤΥΠΩΣΗ)
- 1. 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);
- 2. .
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 & ! ' & " & / "
'& ' & " & #" #
- 3. .
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).
& ) + :
+ & '&
+ & +& '&
$ ") ! ! + # ' # & + # &
+ ! & & & .
- 4. .
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)
- 5. - (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)
- 6. - (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)
- 7. - (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 # ' " ' ! .
- 8. "
.
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;
-
-
- 9. .
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
- 10. .
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]
- 11. 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).