Tải bản đầy đủ (.ppt) (103 trang)

PHÂN TÍCH CÁC GIẢI THUẬT SẮP XẾP pps

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.16 MB, 103 trang )

PHÂN TÍCH
CÁC GIẢI THUẬT SẮP
XẾP
1
Nội dung

Giải thuật Insertion-Sort

Các giải thuật chia để trị

Giải thuật Quicksort

Giải thuật Mergesort

Giải thuật HeapSort

Giải thuật Couting Sort
2

Insertion Sort
3

Insertion

Sort



Ý

tưởng





Mọi dãy 



 luôn có i-1phần tử đầu tiên 




 đã có thứ tự (i ≥ 2)



Tìm cách chèn phần tử 

vào vị trí thích hợp của đoạn đã được
sắp để có dãy mới 



 trở nên có thứ tự

Vị trí này chính là pos thỏa :
≤ (1≤pos≤i)
4
Chương 4: Sắp xếp
Insertion


Sort





dụ
2 8 5 1 6 4 1512
1 2 3 4 5 6 70
5
Chương 4: Sắp xếp
Insertion

Sort





dụ
2 8 5 1 6 4 1512
i
x
1 2 3 4 5 6 70
pos
2
 !"#
6
Chương 4: Sắp xếp

Insertion

Sort





dụ
12 8 5
1
6 4 152
i
x
1 2 3 4 5 6 70
pos
 !"$#
8
7
Chương 4: Sắp xếp
Insertion

Sort





dụ
8 12 5 1 6 4 152

i
x
1 2 3 4 5 6 70
pos
% !"$%#
5
8
Chương 4: Sắp xếp
Insertion

Sort





dụ
5 8 12 1 6 4 152
i
x
1 2 3 4 5 6 70
pos
& !"$&#
1
9
Chương 4: Sắp xếp
Insertion

Sort






dụ
2 5 8 12 6 4 151
i
x
1 2 3 4 5 6 70
pos
' !"$'#
6
10
Chương 4: Sắp xếp
Insertion

Sort





dụ
2 5 6 8 12 4 151
i
x
1 2 3 4 5 6 70
pos
( !"$(#
4

11
Chương 4: Sắp xếp
Insertion

Sort





dụ
2 4 5 6 8 12 151
i
x
1 2 3 4 5 6 70
pos
) !"$)#
15
12
Chương 4: Sắp xếp
Insertion

Sort





dụ
2 4 5 6 8 12 151

pos
1 2 3 4 5 6 70
13
Chương 4: Sắp xếp
Insertion

Sort



Đánh giá thuật toán
void InsertionSort(int a[], int n){
0 int pos, key;
1 for(int i=1; i<n; i++)
//đoạn a[0] đã sắp
{
2 key = a[i];
3 pos = i;
4 while(pos>0 && key<a[pos-1])
5 { a[pos] = a[pos-1];
6 pos ;
}
7 a[pos] = x;
}
}
14
Chương 4: Sắp xếp
 
 
 

 



 

=

n
i
i
t
2
1

=
n
i
i
t
2

=

n
i
i
t
2
1



!"#!
$%"&"&!%'
15

*+, */+/ (A)
 0123
 4567382
% *6182616469:6682
& 32
' ;<6=48=567
( 48>38
) 3?
@ 8>3567
 
 c
1
n
c
2
n-1
0 n-1
c
4
n-1
c
5
c
6


c
7
c
8
n-1 

=
n
j
j
t
2

=

n
j
j
t
2
)1(

=

n
j
j
t
2

)1(
≈n
2
/2 so sánh
≈n
2
/2 gán
Insertion

Sort



Đánh giá thuật toán

Đối với mỗi i = 1, 3, , n -1, trong đó n
=length[A], gọi t
J
là số lần kiểm tra vòng lặp
while trong dòng 5 được thực thi

Gọi T(n) là thời gian thực hiện thuật giải

T(n) = c
1
n + c
2
(n-1)+ c
4
(n-1)+ c

5
Σ
j=2,n
t
j
+ c
6
Σ
j=2,n

(t
j
-1) + c
7
Σ
j=2,n
(t
j
-1)+ c
8
(n-1)
17
Chương 4: Sắp xếp
Insertion

Sort



Đánh giá thuật toán


Trường hợp tốt nhất: Khi dãy đã được sắp xếp,j = 1
18
Chương 4: Sắp xếp
 Dang an + b  đô phưc tap l O(n)
(%)*!+, ./ 01234)+5,6!)+
&78
9 ,: ;<=> 4)+   ? @A 9 ,: ; B" !
425,<=CCD>8@E@

3

FG@A GF88CCC8C
1
2
)1(
2

+
=

=
n
j
nn
j

=

=−

n
j
nn
j
2
2
)1(
)1(
Insertion

Sort



Đánh giá thuật toán
20
Chương 4: Sắp xếp
 Dang an
2
+ bn + c  đô phưc tap l O(n
2
)
Insertion

Sort



Đánh giá thuật toán


.1AB1:CDEFG H1I$2JK
82 LM:NO2

P5JQ:<!2DR<QM1:CD
S719:T82=567<!2OU
2
I2O LFV2
I%

."# I 

 > 

"#> 
%
"#>
&
""">#O#O >

'
"""#O#O>
(
"""#O#O>
)
"#
I"
&
>
'
>

(
#

O& > "

>

>
%
 >
&
O& ?
'
O& ?
(
O&>
)
# 
"

>
%
>
&
O>
)
#
I/"

#

21
Chương 4: Sắp xếp

W 1<!JX:5TQJY71L5CZJQ:
[<\ !7:F]<Q<\^ [<\
22


MN^< 1

*<_"C66#P`

!"#$%&'()"*%$


a66"4: 66#MCL<\

!"#$%&'+$,


.61FPbY

-"&.%&
/

Alg.:*+, */+/ (A)
01j 2← 
4key3A[ j ]
*61A[ j ]616469:66A[1 . . j -1]
i j - 1←

;<6i > 04A[i] > key
4A[i + 1] A[i]←
i i – 1←
A[i + 1] key←
Invariant/""% Hfor&,& A[1 . . j-1]
"% %1%1%
/


*<_

0/12
j = 23
'A[1 . . j-1]4
A[1],5'
A[1]67

×