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 (Merge Sort)
Ngô Công Thng Bài giàng CTDL&GT -Chương 06 6.1
1. Sp xếp chn (Selection Sort)
1.1. Phương pháp
Gi s cnsp xếp tăng dn mt y khoá
a1, a2,..., an.
Ý tưởng ca thut toán như sau:
Chn phn t khoá nh nht .
Đổi ch vi phn t a1.
Sau đó lp li thao tá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.2
1.1. Phương pháp (t iếp)
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.3
1.1. Phương pháp (t iếp)
Procedure selectionSort(a,n);
For i:= 1 to n-1 Do
Begin
1) {Tìmphntnhnht vtrík }
+) k:=i;
+) For j:=i+1 To n Do
If a[j] < a[k] then k:=j
2) {Đổichphntnhnht vtrík chovtríi}
If k ithen a[k]a[i];
End
Return
Ngô Công Thng Bài giàng CTDL&GT -Chương 06 6.4
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)
và 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èn vào 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.
Ngô Công Thng Bài giàng CTDL&GT -Chương 06 6.5
2.1. Phương pháp
d: Cho dãy khoá 6, 10, 1, 7, 4 vi n=5 (dãy
s có 5 phn t).
Dãy đích Dãy ngun
610, 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.6
Th tc chèn
Procedure insertSort(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; {đưatgvào đúngvi trí, chènvàosauj}
End;
Return
Ngô Công Thng Bài giàng CTDL&GT -Chương 06 6.7
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.8
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= (i-1) phép so sánh. Do
vy
Trường hp trung 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.9
3. Sp xếp si 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:
So sánh các cp phn t lin kgi nhau t phi qua
trái,nếu phn t đứng sau nh hơn đứng trước thì đổi
ch.Kết qu ln th nht phn tnhnht ca dãy
được đẩy lên v trí 1 (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 phn tnhnht ca dãy được
đưa v v trí 2.
–C tiếp tc là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.10