<span class='text_page_counter'>(1)</span><div class='page_container' data-page=1>
CH
ƯƠ
NG 3
S
Ắ
P X
Ế
P VÀ TÌM KI
Ế
M NÂNG CAO
GV. Ngô Công Th
ắ
ng
B
ộ
môn Công ngh
ệ
ph
ầ
n m
ề
m
Khoa Công ngh
ệ
thông tin
Website: dse.vnua.edu.vn/ncthang
Email:
N
ộ
i dung Ch
ươ
ng 3
</div>
<span class='text_page_counter'>(2)</span><div class='page_container' data-page=2>
1. S
ắ
p x
ế
p nhanh (Quick Sort)
1.1. Ph
ươ
ng pháp
• S
ắ
p
x
ế
p
nhanh
(quick sort) còn
đượ
c
s
ắ
p
x
ế
p phân
đ
o
ạ
n (partition sort
)
.
•
Ý t
ưở
ng thu
ậ
t tốn:
– Ch
ọ
n ng
ẫ
u nhiên m
ộ
t ph
ầ
n t
ử
x.
– Duy
ệ
t t
ừ
bên trái m
ả
ng cho t
ớ
i khi có m
ộ
t ph
ầ
n t
ử
a
<sub>i</sub>
>
=
x
– Sau
đ
ó duy
ệ
t t
ừ
bên ph
ả
i m
ả
ng cho t
ớ
i khi có m
ộ
t
ph
ầ
n t
ử
aj
=
<x
–
Đổ
i ch
ỗ
a
<sub>i</sub>
và a
<sub>j</sub>
– Ti
ế
p t
ụ
c duy
ệ
t và
đổ
i ch
ỗ
cho t
ớ
i khi 2 phía g
ặ
p nhau.
Ngơ Cơng Thắng Bài giảng Cấu trúc dữ liệu và giải thuật 2 - Chương 03 3.3
1.1. Ph
ươ
ng pháp (
<i>ti</i>
<i>ế</i>
<i>p</i>
)
• K
ế
t qu
ả
m
ả
ng
đượ
c
chia thành 2 ph
ầ
n:
</div>
<span class='text_page_counter'>(3)</span><div class='page_container' data-page=3>
Th
ủ
t
ụ
c s
ắ
p x
ế
p nhanh
Procedure Q_sort(L,R);
1) If L>=R then return;
2) i:=L; j:=R ; k:=(L+R) div 2;
3) x:=a[k];
4) Repeat
While a[i] <x Do i:=i+1;
While a[j] >x Do j:=j-1;
If i<j then a[i]
↔
a[j]
Until i=j
5) Call Q_sort(L,j-1); { Th
ự
c hi
ệ
n trên n
ử
a <x }
6) Call Q_sort(j+1,R); { Th
ự
c hi
ệ
n trên n
ử
a >x }
Return
Ngô Công Thắng Bài giảng Cấu trúc dữ liệu và giải thuật 2 - Chương 03 3.5
1.2.
Đ
ánh giá
•
Ng
ườ
i ta
đ
ã ch
ứ
ng minh
đượ
c th
ờ
i gian trung
bình th
ự
c hi
ệ
n gi
ả
i thu
ậ
t là:
T
<sub>tb</sub>
= O(nlog
<sub>2</sub>
n)
</div>
<span class='text_page_counter'>(4)</span><div class='page_container' data-page=4>
2. S
ắ
p x
ế
p vun
đố
ng (Heap Sort)
2.1. Ph
ươ
ng pháp
•
M
ộ
t cây nh
ị
phân có chi
ề
u cao h
đượ
c g
ọ
i là
đố
ng khi:
–
Là cây nh
ị
phân hoàn ch
ỉ
nh mà các nút lá
ở
m
ứ
c
h-1 ph
ả
i n
ằ
m phía bên trái.
–
Khố
ở
nút cha bao gi
ờ
c
ũ
ng l
ớ
n h
ơ
n khoá
ở
nút
con.
Ngô Công Thắng Bài giảng Cấu trúc dữ liệu và giải thuật 2 - Chương 03 3.7
2. S
ắ
p x
ế
p vun
đố
ng (Heap Sort)
2.1. Ph
ươ
ng pháp
•
Thu
ậ
t tốn s
ắ
p x
ế
p vun
đố
ng chia làm 2 giai
đ
o
ạ
n.
</div>
<span class='text_page_counter'>(5)</span><div class='page_container' data-page=5></div>
<span class='text_page_counter'>(6)</span><div class='page_container' data-page=6></div>
<span class='text_page_counter'>(7)</span><div class='page_container' data-page=7>
- L
ặ
p l
ạ
i các b
ướ
c t
ươ
ng t
ự
cho các cây còn l
ạ
i.
Cu
ố
i cùng ta thu
đượ
c dãy
đ
ã s
ắ
p là s=(11, 23, 42, 58, 65,
74)
* Gi
ả
i thu
ậ
t vun
đố
ng:
- M
ộ
t lá coi nh
ư
cây con là m
ộ
t
đố
ng.
- Thu
ậ
t toán ti
ế
n hành t
ừ
đ
áy lên: Chuy
ể
n
đổ
i thành
đố
ng
cho m
ộ
t cây con mà cây con trái và cây con ph
ả
i c
ủ
a g
ố
c
đ
ã
là m
ộ
t
đố
ng.
Cây nh
ị
phân hồn ch
ỉ
nh có n nút thì v
ớ
i ch
ỉ
s
ố
[n/2] tr
ở
lên
có th
ể
là nút cha: [n/2], [n/2 ]-1, . . . , 1.
Ngô Công Thắng Bài giảng Cấu trúc dữ liệu và giải thuật 2 - Chương 03 3.13
<b>a) Th</b>
<b>ủ</b>
<b> t</b>
<b>ụ</b>
<b>c vun </b>
<b>đố</b>
<b>ng:</b>
<b>Ch</b>
<b>ỉ</b>
<b>nh lý cây nh</b>
<b>ị</b>
<b> phân con hoàn ch</b>
<b>ỉ</b>
<b>nh g</b>
<b>ố</b>
<b>c i trên cây nh</b>
<b>ị</b>
<b>phân có n nút </b>
<b>để</b>
<b> tr</b>
<b>ở</b>
<b> thành “</b>
<b>đố</b>
<b>ng” v</b>
<b>ớ</b>
<b>i </b>
<b>đ</b>
<b>i</b>
<b>ề</b>
<b>u ki</b>
<b>ệ</b>
<b>n cây con </b>
<b>trái và cây con ph</b>
<b>ả</b>
<b>i có g</b>
<b>ố</b>
<b>c là 2i và 2i+1 </b>
<b>đ</b>
<b>ã là </b>
<b>đố</b>
<b>ng.</b>
<b>Procedure ADJUST(i,n)</b>
<b>1. { Kh</b>
<b>ở</b>
<b>i </b>
<b>đầ</b>
<b>u }</b>
<b>Key:=K[i]; j:=2*i;</b>
</div>
<!--links-->