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-1phầ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
–
Ví
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
–
Ví
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
–
Ví
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
–
Ví
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
–
Ví
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
–
Ví
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
–
Ví
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
–
Ví
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
–
Ví
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)
0123
4567382
% *6182616469:6682
& 32
' ;<6=48=567
( 48>38
) 3?
@ 8>3567
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
Dang an + b đô phưc tap l O(n)
(%)*!+, ./ 01234)+5,6!)+
&78
9 ,: ;<=> 4)+ ? @A 9 ,: ; B" !
425,<=CCD>8@E@
3
FG@A GF88CCC8C
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
Dang an
2
+ bn + c đô phưc tap l O(n
2
)
Insertion
Sort
–
Đánh giá thuật toán
.1AB1:CDEFG H1I$2JK
82 LM:NO2
P5JQ:<!2DR<QM1:CD
S719:T82=567<!2OU
2
I2O LFV2
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<!JX:5TQJY71L5CZJQ:
[<\ !7:F]<Q<\^ [<\
22
MN^< 1
*<_"C66#P`
!"#$%&'()"*%$
a66"4: 66#MCL<\
!"#$%&'+$,
.61FPbY
-"&.%&
/
Alg.:*+, */+/ (A)
01j 2←
4key3A[ j ]
*61A[ j ]616469:66A[1 . . j -1]
i j - 1←
;<6i > 04A[i] > key
4A[i + 1] A[i]←
i i – 1←
A[i + 1] key←
Invariant/""% Hfor&,& A[1 . . j-1]
"% %1%1%
/
*<_
0/12
j = 23
'A[1 . . j-1]4
A[1],5'
A[1]67