KHOA CÔNG NGHỆ THÔNG TIN
CẤU TRÚC DỮ LIỆU
VÀ GIẢI THUẬT
(Data Structures And Algorithms)
BÀI 4: CÁC GIẢI THUẬT SẮP XẾP NÂNG CAO
01. QUICK SORT
NỘI
DUNG
02. MERGE SORT
03. HEAP SORT
01. QUICK SORT
•Thuật tốn sắp xếp Quick Sort (sắp xếp nhanh) phức tạp
hơn một chút so với các thuật toán sắp xếp khác.
•Cho một danh sách các phần tử, thuật toán quick sort là
thuật toán chia để trị, đệ quy bao gồm 3 phần chính:
1. Chọn một giá trị làm mốc (pivot value)
2. Phân vùng danh sách làm hai: danh sách trái (nhỏ
hơn giá trị mốc), và danh sách phải (lớn hơn hoặc
bằng giá trị mốc)
3. Đệ quy cho danh sách trái, đệ quy cho danh sách phải
感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿!
ibaotu.com
KHOA CÔNG NGHỆ THÔNG TIN
3
01. QUICK SORT
1. Lấy một giá trị làm mốc: Lấy giá trị lớn nhất trong hai giá trị bên trái (3)
3
1
4
1
5
9
2
6
5
3
2. Phân vùng danh sách thành hai danh sách: một danh sách chứa các phần tử có
giá trị < mốc, một danh sách chứa các phần tử có giá trị ≥ mốc
感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿!
ibaotu.com
Danh sách 1 < mốc =
2
1
1
Danh sách 2 ≥ mốc =
4
5
9
3
6
5
3
3. Đệ quy
Danh sách 1 2
1 1
xong
1
1
2
xong
Đây là danh sách được sắp cuối cùng…
KHOA CÔNG NGHỆ THÔNG TIN
Danh sách 2
4
4
3
3 3
xong
5
9
3
3
4
xong
5
6
5
3
9
6
5
6
5 5
xong
5
6
xong
5
9
xong
4
01. QUICK SORT
3
l là biên trái, r là biên phải
l
3 1
pval 3
l
3 1
l từ biên trái tìm ptử ≥ pval, r từ biên
phải tìm ptử < pval
Nếu l != r Hốn vị ptử l với r
Khi l < r, tìm tiếp l và r
Nếu l != r Hoán vị ptử l với r
Khi l < r, tìm tiếp l và r. Dừng khi l ≥
r
Tách làm 2 danh sách dựa vào chỉ mục l
KHOA CÔNG NGHỆ THÔNG TIN
4
4
4
1
1
1
5
5
5
9
2
6
5
3
9
2
6
5
r
3
9
r
2 6
5
3
5
3
l
2 1
4
1
5
9
r
3 6
2
1
l
4
r
1
5
9
3
6
5
3
1
l
1
r
4
5
9
3
6
5
3
2
1
l,r
1 4 5
9
3
6
5
3
2
1
1
9
3
6
5
3
感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿!
ibaotu.com
1
2
4
5
5
01. QUICK SORT
Giao diện
public int[] sort( int[] list )
{
return (qsort( list, 0, list.Length - 1 ));
} // Sort
private int[] qsort( int[] list, int left, int right )
{
int pval, l = left, r = right, temp;
感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿!
ibaotu.com
if ( l == r )
return list;
Lấy giá trị lớn nhất
trong hai số bên trái
trong danh sách
KHOA CÔNG NGHỆ THÔNG TIN
if ( list[l] >= list[l+1] )
pval = list[l];
else
pval = list[l+1];
6
01. QUICK SORT
Ở đây ta phân vùng danh sách thành hai danh sách. Đây là hai danh sách ảo
là danh sách được xác định bởi các chỉ số, không phải hai mảng riêng biệt…
while ( l < r )
{
while (( list[l] < pval ) && ( l < r ))
Chụm vào từ bên phải và bên
l ++;
trái cho đến khi tìm thấy các giá
while (( list[r] >= pval ) && ( l < r ))
trị để hoán vị hoặc ta chạy hết
r --;
các phần tử trong danh sách.
感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿!
ibaotu.com
KHOA CÔNG NGHỆ THÔNG TIN
7
01. QUICK SORT
if ( l != r )
{
temp = list[l];
list[l] = list[r];
list[r] = temp;
Nếu chỉ mục trái khác chỉ
mục phải là ta đã tim được
các giá trị để hoán vị, và ở
đây ta thực hiện hoán vị…
} // if
} // while
感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿!
ibaotu.com
Nếu xảy ra bất kỳ hốn vị
nào thì ta đệ quy; ngược
lại, ta kết thúc…
KHOA CÔNG NGHỆ THÔNG TIN
qsort( list, left, l-1 );
qsort( list, l, right );
return list;
} // qsort
8
01. QUICK SORT
Hiệu năng của Quick Sort bị
tác động bởi phần tử được
chọn làm điểm mốc.
Hiệu xuất của quick sort trong
trường hợp xấu nhất, O(n2).
感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿!
ibaotu.com
Trường hợp tổng quát, quick
sort có sự thực thi O(n log n)
thời gian biểu thị ở bên phải…
Quick Sort được coi là sắp
xếp nhanh nhất
Ưu điểm:
cực nhanh
KHOA CÔNG NGHỆ THÔNG TIN
Nhược điểm:
rất phức tạp
đệ quy ồ ạt
9
02. MERGE SORT
•Merge Sort (Sắp Xếp Trộn) cũng là thuật tốn đệ quy, chia
để trị
•Các bước của thuật tốn là:
̶ Đệ quy phân vùng danh sách đầu vào thành hai danh
sách, L1 và L2 khoảng n/2 phần tử mỗi danh sách cho
đến khi ta có tập các danh sách với 1 hoặc 2 phần tử
trong mỗi danh sách.
̶ Đến đây, mỗi L1 và L2 được trộn lại thành danh sách
duy nhất S, các phần tử của L1 và L2 được đưa vào
danh sách S theo thứ tự.
感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿!
ibaotu.com
KHOA CÔNG NGHỆ THÔNG TIN
10
02. MERGE SORT
Merge Sort tương đối đơn giản như sau:
Kết thúc khi danh
sách chỉ có 1
phần tử
void MergeSort(int[] arr, int left, int right)
{
v
if(left < right)
{
v
int mid = (left + right)
/ 2;
感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿!
ibaotu.com
Xác định phần tử giữa
để chia danh sách
MergeSort(arr, left, mid);
v
MergeSort(arr, mid + 1, right);
Chia thành hai tập
L1, L2 và đệ quy
v right);
Merge(arr, left, mid,
}
}
KHOA CÔNG NGHỆ THÔNG TIN
Trộn L1 và L2 với nhau cho
ra danh sách được sắp xếp
11
02. MERGE SORT
void Merge(int[] arr, int left, int mid, int right)
{
int[] leftarray = new int[mid - left + 1];
int[] rightarray = new int[right - mid];
Array.Copy(arr, left, leftarray, 0, mid - left + 1);
Array.Copy(arr, mid + 1, rightarray, 0, right - mid);
感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿!
ibaotu.com
Tạo hai mảng con leftarray
(L1), rightarray (L2)
KHOA CÔNG NGHỆ THÔNG TIN
12
02. MERGE SORT
int i = 0;
int j = 0;
for(int k = left; k < right + 1; k++){
if(i == leftarray.Length){
arr[k] = rightarray[j]; j++;
}
else if(j == rightarray.Length){
arr[k] = leftarray[i]; i++;
}
else if(leftarray[i] <= rightarray[j]){
arr[k] = leftarray[i]; i++;
}
else{
arr[k] = rightarray[j]; j++;
}
}
Trộn các phần tử trong
mảng leftarray, mảng
rightarray vào mảng
arr theo thứ tự giá trị
phần tử
感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿!
ibaotu.com
}
KHOA CÔNG NGHỆ THÔNG TIN
13
02. MERGE SORT
3
3
3
3
1
1
4
1
1
1
5
9
2
6
5
4
1
4
9
1
4
5
5
1
9
9
5
2
3
2
6
5
3
5
6
2
6
3
5
感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿!
3
ibaotu.com
1
3
1
9
2
3
1
3
4
1
1
1
3
4
1
KHOA CÔNG NGHỆ THÔNG TIN
2
9
2
5
6
2
5
1
9
2
3
3
4
5
5
3
3
6
5
6
5
9
9
14
02. MERGE SORT
•Ta có thể thấy rằng thời gian chạy của merge sort cho danh sách có
độ dài n là T(n)
•Vì ta cắt đơi danh sách và sau đó đệ quy, ta có thể kết luận:
2T(n/2)+n
•Lưu ý là ta cộng them n bước để trộn kết quả hai danh sách
•Hiệu năng trung bình của Merger Sort là O(n log n)
•Merge Sort u cầu khơng gian nhớ O(n)
•Merge Sort có thể là một lựa chọn tối ưu vì nó thực thi ngang bằng
với Quick Sort nhưng sử dụng ít bộ nhớ hơn
感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿!
ibaotu.com
KHOA CÔNG NGHỆ THÔNG TIN
15
03. HEAP SORT
•Heap Sort (Sắp xếp vun đống) là thuật toán sắp xếp dựa trên cấu
trúc dữ liệu Binary Heap (Đống nhị phân). Tìm phần tử lớn nhất và
đặt nó ơ cuối danh sách; lặp lại cho danh sách gồm các phần tử cịn
lại.
•Binary Heap là gì?
▪ Binary Heap là một Complete Binary Tree (cây nhị phân
hoàn chỉnh) với nút cha có giá trị lớn hơn giá trị hai nút con.
▪ Cây nhị phân hoàn chỉnh là cây nhị phân trong đó mọi cấp,
ngoại trừ cấp cuối cùng, được lấp đầy hồn tồn.
• Mảng biểu diễn cho đống nhị phân. Nếu nút cha lưu ở chỉ mục i thì
nút con bên trái là 2*i+1, và nút con bên phải là 2*i+2.
感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿!
ibaotu.com
KHOA CÔNG NGHỆ THÔNG TIN
16
03. HEAP SORT
12 11 13 5 6 7
12
13
感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿!
ibaotu.com
11
5
11
13
6
7
Cây nhị phân hồn chỉnh
(Complete Binary Tree)
KHOA CƠNG NGHỆ THƠNG TIN
5
12
6
7
Đống nhị phân (Binary Heap)
17
03. HEAP SORT
•Thuật tốn Heap Sort cho sắp xếp tăng dần:
1. Tạo Binary Heap (đống nhị phân) từ danh sách
2. Lúc này, phần tử lớn nhất được lưu ở nút gốc của đống. Hốn vị
nó với phần tử cuối cùng của đống. Giảm kích thước đống đi 1
đơn vị. Cuối cùng, chất đống gốc của cây
3. Lặp lại các bước trên khi kích thước của đống lớn hơn 1
感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿!
ibaotu.com
KHOA CƠNG NGHỆ THÔNG TIN
18
03. HEAP SORT
Ví dụ 1:
12 11 13 5 6 7
13 11 12 5 6 7
7
11
12
6
13
7
13
12
5
感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿!
ibaotu.com
11
5
11
13
6
7
Cây nhị phân hoàn chỉnh
(Complete Binary Tree)
KHOA CÔNG NGHỆ THÔNG TIN
5
11
12
6
7
5
12
6
13
Đống nhị phân
(Binary Heap)
19
03. HEAP SORT
7
11
12
5
6
13
7
11
12
7
5
6
12 11
7 5
7
6
6
11 7
5
12
6
12
感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿!
ibaotu.com
11
5
11
12
6
13
5
11
12
6
5
11
7
6
5
7
12
Đống nhị phân
(Binary Heap)
KHOA CÔNG NGHỆ THÔNG TIN
20
03. HEAP SORT
6
11 7
5
6
12
11 7
5
6
6
5 6 7 11
11 6 7 5
5
11
感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿!
ibaotu.com
11
5
11
7
12
5
6
7
5
6
7
7
11
Đống nhị phân
(Binary Heap)
KHOA CÔNG NGHỆ THÔNG TIN
21
03. HEAP SORT
5 6 7 11
5
5 6 7
7 6 5
5 6 7
5
7
5
感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿!
ibaotu.com
6
7
6
7
6
5
6
7
Đống nhị phân
(Binary Heap)
11
KHOA CÔNG NGHỆ THÔNG TIN
22
03. HEAP SORT
6 5
5 6
5 6 7
6
5
5
5
5 6
5
5
感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿!
ibaotu.com
6
7
6
5
6
Đống nhị phân
(Binary Heap)
12 11 13 5 6 7
KHOA CÔNG NGHỆ THÔNG TIN
5 6 7 11 12 13
23
03. HEAP SORT
Ví dụ 2:
4 10 3 5 1
10 4 3 5 1
10 5 3 4 1
1 5 3 4 10
10
10
1
4
感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿!
ibaotu.com
10
5
4
3
1
5
5
3
1
4
5
3
1
4
3
10
Đống nhị phân
(Binary Heap)
KHOA CÔNG NGHỆ THÔNG TIN
24
03. HEAP SORT
1 5 3 4 10
1 5 3 4
5 1 3 4
1
5
1
5 4 3 1
1 4 3 5
5
1
感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿!
ibaotu.com
5
4
5
3
10
4
1
3
4
4
3
4
3
1
3
5
Đống nhị phân
(Binary Heap)
KHOA CÔNG NGHỆ THÔNG TIN
25