CHƯƠNG 6
GII THUT SP XP
GV. NgôCôngThng
BmônCôngnghphnmm
KhoaCôngnghthôngtin
Website: dse.vnua.edu.vn/ncthang
Email: ncthang@vnua.edu.vn
Chương 6: Gii thut sp xếp
1. Sp xếp chn (Selection Sort)
2. Sp xếp chèn (Insert Sort)
3. Sp xếp ni bt (Bubble Sort)
4. Sp xếp nhanh (Quick Sort)
5. Sp xếp vun đống (Heap Sort)
6. Sp xếp hòa nhp (M erge Sort)
Ngô Công Thng Bài giàng CTDL&GT -Chương 06 6.2
1. Sp xếp chn (Selection Sort)
1.1. Phương pháp
Gi s cnsp xếp tăng dn mt y kh
a1, a2,..., an.
Ý tưởng ca thut toán như sau:
Chn phn t có khoá nh nht .
Đổi ch vi phn t a1.
Sau đó lp li thao c trên vi n-1 phn t
còn li, ri li lp li như trên vi n-2 phn t
còn li,..., cho ti khi ch còn 1 phn t.
Ngô Công Thng Bài giàng CTDL&GT -Chương 06 6.3
1.1. Phương pháp (t iếp)
Ví d:
Cho dãy khoá ban đầu là: 6, 10, 1, 8, 9
vi n=5.
i=1 1, 10, 6, 8, 9
i=2 1, 6, 10, 8, 9
i=3 1, 6, 8, 10, 9
i=4 1, 6, 8, 9, 10
Ngô Công Thng Bài giàng CTDL&GT -Chương 06 6.4
1.1. Phương pháp (t iếp)
Procedure Selection_sort(a,n);
For i:= 1 to n-1 Do
Begin
{Tìm phn t nh nht v trí k }
k:=i;
For j:=i+1 To n Do
If a[j] < a[k] then k:=j
{Đổi ch phn t nh nht k cho phn t i}
If k i then a[k]a[i];
End
Return
Ngô Công Thng Bài giàng CTDL&GT -Chương 06 6.5
2.2. Đánh g gii thut
Ngô Công Thng Bài giàng CTDL&GT -Chương 06
Vi gii thut trình bày trên thì phép toán tích cc
là phép so sánh (a[j]<a[k]).
Gi C là s lượng phép so sánh, C được tính như sau:
lượt th i (i=1, 2, , n-1), để tìm khoá nh nht
cn n-i phép so sánh. S lượng phép so sánh này
không ph thuc vào tình trng ban đầu ca dãy
khoá. Do đó ta có:
Vy, độ phc tp tính toán là O(n2)
6.6
2. Sp xếp chèn (Insert Sort)
2.1. Phương pháp
Phương pháp này được nhng người chơi bài hay
dùng.
Gi s cn sp xếp tăng dn dãy khoá a1, a2,..., an. Ý
tưởng thut toán như sau:
Các phn t được chia thành dãy đích: a1,..., ai-1 (kết qu)
dãy ngun ai,..., an.
Bt đầu vi i=2, mi bước phn t th i ca dãy ngun
được ly ra và chèno v trí thích hp trong dãy đích sao
cho dãy đích vn tăng dn. Sau đó i tăng lên 1 và lp li.
N Công Thng Bài giàng CTDL&GT -Chương 06 6.7
2.1. Phương pháp
Ví d: Cho dãy khoá 6, 10, 1, 7, 4 vi n=5 (dãy
s 5 phn t).
Dãy đích Dãy ngun
6 10, 1, 7, 4
i=2 6, 10 1, 7, 4
i=3 1, 6, 10 7, 4
i=4 1, 6, 7, 10 4
i=5 1, 4, 6, 7, 10
Ngô Công Thng Bài giàng CTDL&GT -Chương 06 6.8
Th tc chèn
Procedure Insert_sort(a,n)
1) a[0]:=-
2) For i:=2 to n Do
Begin
tg:=a[i]; j:=i-1;
While tg<a[j] Do
Begin
a[j+1]:=a[j]; j:=j-1;
End;
a[j+1]:=tg; {đưa tg vào đúng vi trí}
End;
Return
Ngô Công Thng Bài giàng CTDL&GT -Chương 06 6.9
2.2. Đánh giá thut toán
Phép toán tích cc trong thut toán này là
phép so sánh (tg<a[j]). S phép toán so sánh C
được tính như sau:
Trường hp thun li nht là dãy khoá a1, a2,..., an
đã được sp, như vy mi ln ch cn 1 phép so
sánh. Do vy
Ngô Công Thng Bài giàng CTDL&GT -Chương 06 6.10
2.2. Đánh giá thut toán
Trường hp xu nht nếu dãy khoá sp theo th t ngược vi
th t sp xếp thì lượt i cn có: C= (i-1) phép so sánh. Do
vy
Trường hp trung bình: Gi s mi giá tr khoá đều xut hin
đồng kh năng thì trung bình phép so sánh lượt th i là Ci=
i/ 2, do đó s phép so sánh trung bình ca gii thut này là:
O(n2)
Ngô Công Thng Bài giàng CTDL&GT -Chương 06 6.11
3. Sp xếp ni bt (Bubble Sort)
3.1. Phương pháp
Gi s cn sp xếp tăng dn dãy khoá a1, a2,..., an. Ý
tưởng thut toán như sau:
Đổi ch các phn t lin k nhau theo th t tăng
dn, ln th nht s nhnht ca dãy được đẩy lên v
trí đầu tiên (gi là phn t được sp).
Tiếp tc đổi ch các phn t lin k ca y chưa
sp, ln th 2 ta được s nhnht ca y chưa sp
được đưa lên đầuy chưa sp.
–C tiếp tc m tương t như trên cho đến khi y ch
còn 1 phn t.
Ngô Công Thng Bài giàng CTDL&GT -Chương 06 6.12
3.1. Phương pháp (t iếp)
d: Cho y khoá ban đầu là: 6, 3, 7,
10, 1, 8 vi n=6.
6, 3, 7, 10, 1, 8
i=1 1, 6, 3, 7, 10, 8
i=2 1, 3, 6, 7, 8, 10
i=3 1, 3, 6, 7, 8, 10
i=4 1, 3, 6, 7, 8, 10
i=5 1, 3, 6, 7, 8, 10
Ngô Công Thng Bài giàng CTDL&GT -Chương 06 6.13
Th tc sp xếp ni bt
Procedure Bubble_sort(a,n)
For i:= 1 to n-1 Do
For j:= n downto i+1 Do
If a[j]<a[j-1] then
a[j] <-> a[j-1];
Return
Ngô Công Thng Bài giàng CTDL&GT -Chương 06 6.14
3.2. Đánh giá thut toán
Gii thut này tương t như gii thut sp xếp bng
cách chn trc tiếp (mc 1), do đó có:
Nhn xét: Vi 3 phương pháp sp xếp trên, nếu n
va và nh thì phương pháp chèn trc tiếp (insert
sort) t ra tt hơn, nếu vi n ln thì c 3 phương
pháp đều có cp O(n2), đây là mt chi phí thi gian
khá cao.
Ngô Công Thng Bài giàng CTDL&GT -Chương 06 6.15
4. Sp xếp nhanh (Quick Sort)
4.1. Phương pháp
•Sp xếpnhanh (quick sort) còn được sp xếp phân
đon(partition sort).
Ý tưởng thut toán:
Chn ngu nhiên mt phn t x.
Duyt t bên trái mng cho ti khi có mt phn t
ai>=x
Sau đó duyt t bên phi mng cho ti khi có mt
phn t aj=<x
Đổi ch aivà aj
Tiếp tc duyt và đổi ch cho ti khi 2 phía gp nhau.
Ngô Công Thng Bài giàng CTDL&GT -Chương 06 6.16
4.1. Phương pháp (t iếp)
•Kết qu mng được chia thành 2 phn:
bên trái là các phn t < x, bên phi là các
phn t > x.
Ngô Công Thng Bài giàng CTDL&GT -Chương 06 6.17
Th tc sp 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); { Thc hin trên na <x }
6) Call Q_sort(j+1,R); { Thc hin trên na >x }
Return
Ngô Công Thng Bài giàng CTDL&GT -Chương 06 6.18
4.2. Đánh giá
Người ta đã chng minh được thi gian trung
bình thc hin gii thut là:
Ttb= O(nlog2n)
Như vy, vi n khá ln Quick sort hiu lc
hơn 3 thut gii trên.
Ngô Công Thng Bài giàng CTDL&GT -Chương 06 6.19
5. Sp xếp vun đống (Heap Sort)
5.1. Phương pháp
Mt cây nh phân chiu cao h được gi là
đống khi:
Là cây nh phân hoàn chnh mà các nút lá mc h-
1 phi nm phía bên trái.
Khoá nút cha bao gi cũng ln hơn khoá nút
con.
Ngô Công Thng Bài giàng CTDL&GT -Chương 06 6.20