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

QUICK SORT

01.

MERGE SORT

02.

HEAP SORT

NỘI DUNG

03.

感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿! ibaotu.com

01. QUICK SORT •Thuật toá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

3

KHOA CÔNG NGHỆ THÔNG TIN

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

感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿! ibaotu.com

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

2 1 1

Danh sách 1 < mốc =

Danh sách 2 ≥ mốc =

4 5 9 3 6 5 3

Danh sách 2

Danh sách 1 2 1 1

3. Đệ quy

4 5 9 3 6 5 3

4 3 3

9 6 5 5

1 1 xong

2 xong

5 6 5

4 xong

3 3 xong

9 xong

Đây là danh sách được sắp cuối cùng…

6 xong

5 5 xong

4

KHOA CÔNG NGHỆ THÔNG TIN

01. QUICK SORT

3 1 4 1 5 9 2 6 5 3

r l 3 1 4 1 5 9 2 6 5 3

pval

3

l là biên trái, r là biên phải

r

l 3 1 4 1 5 9 2 6 5 3

r

感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿! ibaotu.com

l 2 1 4 1 5 9 3 6 5 3

l từ biên trái tìm ptử ≥ pval, r từ biên phải tìm ptử < pval

Nếu l != r Hoán vị ptử l với r

l r

2 1 4 1 5 9 3 6 5 3

l r

Khi l < r, tìm tiếp l và r

2 1 1 4 5 9 3 6 5 3

Nếu l != r Hoán vị ptử l với r

l,r

2 1 1 4 5 9 3 6 5 3

2 1 1

4 5 9 3 6 5 3

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

5

KHOA CÔNG NGHỆ THÔNG TIN

01. QUICK SORT

public int[] sort( int[] list ) { Giao diện return (qsort( list, 0, list.Length - 1 ));

} // Sort

感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿! ibaotu.com

private int[] qsort( int[] list, int left, int right ) {

int pval, l = left, r = right, temp;

if ( l == r )

return list;

if ( list[l] >= list[l+1] )

pval = list[l];

else

Lấy giá trị lớn nhất trong hai số bên trái trong danh sách pval = list[l+1];

6

KHOA CÔNG NGHỆ THÔNG TIN

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…

感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿! ibaotu.com

while ( l < r ) {

while (( list[l] < pval ) && ( l < r ))

l ++;

while (( list[r] >= pval ) && ( l < r ))

r --; Chụm vào từ bên phải và bên trái cho đến khi tìm thấy các giá trị để hoán vị hoặc ta chạy hết các phần tử trong danh sách.

7

KHOA CÔNG NGHỆ THÔNG TIN

01. QUICK SORT

if ( l != r ) {

感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿! ibaotu.com

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

qsort( list, left, l-1 ); qsort( list, l, right );

Nếu xảy ra bất kỳ hoán vị nào thì ta đệ quy; ngược lại, ta kết thúc… return list;

} // qsort

8

KHOA CÔNG NGHỆ THÔNG TIN

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.

感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿! ibaotu.com

Hiệu xuất của quick sort trong trường hợp xấu nhất, O(n2).

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

Nhược điểm: rất phức tạp đệ quy ồ ạt

9

KHOA CÔNG NGHỆ THÔNG TIN

02. MERGE SORT •Merge Sort (Sắp Xếp Trộn) cũng là thuật toán đệ quy, chia để trị •Các bước của thuật toán là:

感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿! ibaotu.com

̶ Đệ 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ự.

10

KHOA CÔNG NGHỆ THÔNG TIN

02. MERGE SORT

Merge Sort tương đối đơn giản như sau:

v

void MergeSort(int[] arr, int left, int right) {

感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿! ibaotu.com

v

v

if(left < right) { Kết thúc khi danh sách chỉ có 1 phần tử int mid = (left + right) / 2;

v

MergeSort(arr, left, mid); MergeSort(arr, mid + 1, right); Xác định phần tử giữa để chia danh sách

Merge(arr, left, mid, right);

} Chia thành hai tập L1, L2 và đệ quy

}

Trộn L1 và L2 với nhau cho ra danh sách được sắp xếp

11

KHOA CÔNG NGHỆ THÔNG TIN

02. MERGE SORT

void Merge(int[] arr, int left, int mid, int right) {

感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿! ibaotu.com

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);

Tạo hai mảng con leftarray (L1), rightarray (L2)

12

KHOA CÔNG NGHỆ THÔNG TIN

02. MERGE SORT int i = 0; int j = 0; for(int k = left; k < right + 1; k++){

if(i == leftarray.Length){

感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿! ibaotu.com

arr[k] = rightarray[j]; j++;

} else if(j == rightarray.Length){ arr[k] = leftarray[i]; i++;

} else if(leftarray[i] <= rightarray[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ử

arr[k] = leftarray[i]; i++;

} else{

arr[k] = rightarray[j]; j++;

}

}

}

13

KHOA CÔNG NGHỆ THÔNG TIN

02. MERGE SORT

3 1 4 1 5 9 2 6 5 3

3 1 4 1 5

9 2 6 5 3

5 3

3 1 4

1 5

9 2 6

3 1

4

1

9 2

6

5

3

5

感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿! ibaotu.com

1

3

9

2

2 9

1 3

2 6 9

1 3 4

1 5

3 5

2 3 5 6 9

1 1 3 4 5

1 1 2 3 3 4 5 5 6 9

14

KHOA CÔNG NGHỆ THÔNG TIN

感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿! ibaotu.com

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 yê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

15

KHOA CÔNG NGHỆ THÔNG TIN

感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿! ibaotu.com

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 hoàn toà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.

16

KHOA CÔNG NGHỆ THÔNG TIN

03. HEAP SORT

12 11 13 5 6 7

感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿! ibaotu.com

12 13

11 11 13 12

7 6 5 7 6 5

Đống nhị phân (Binary Heap)

Cây nhị phân hoàn chỉnh (Complete Binary Tree)

17

KHOA CÔNG NGHỆ THÔNG TIN

03. HEAP SORT •Thuật toán Heap Sort cho sắp xếp tăng dần:

感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿! ibaotu.com

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. Hoá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

18

KHOA CÔNG NGHỆ THÔNG TIN

03. HEAP SORT

Ví dụ 1:

7 11 12 5 6 13 13 11 12 5 6 7 12 11 13 5 6 7

感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿! ibaotu.com

7 13 12

11 11 12 11 12 13

13 6 5 7 6 5 7 6 5

Đống nhị phân (Binary Heap) Cây nhị phân hoàn chỉnh (Complete Binary Tree)

19

KHOA CÔNG NGHỆ THÔNG TIN

03. HEAP SORT

7 11 12 5 6 13 6 11 7 5 12 7 11 12 5 6 12 11 7 5 6

感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿! ibaotu.com

7 6 7 12

11 11 11 11 12 7 12 7

5 13 6 5 12 6 5 6 5

Đống nhị phân (Binary Heap)

20

KHOA CÔNG NGHỆ THÔNG TIN

03. HEAP SORT

5 6 7 11 6 11 7 5 11 6 7 5 6 11 7 5 12

感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿! ibaotu.com

5 6 11 6

6 11 6 11 7 7 7 7

11 5 5 5 12

Đống nhị phân (Binary Heap)

21

KHOA CÔNG NGHỆ THÔNG TIN

03. HEAP SORT

5 6 7 7 6 5 5 6 7 11 5 6 7

感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿! ibaotu.com

5 7 5 5

6 6 6 7 6 5 7 7

Đống nhị phân (Binary Heap) 11

22

KHOA CÔNG NGHỆ THÔNG TIN

03. HEAP SORT

5 6 5 5 6 5 6 5 6 7

感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿! ibaotu.com

5 6 5 5 5

5 6 6 6 7

Đống nhị phân (Binary Heap)

12 11 13 5 6 7 5 6 7 11 12 13

23

KHOA CÔNG NGHỆ THÔNG TIN

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

感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿! ibaotu.com

4 10 10 1

10 4 5 5 3 3 3 3

5 5 4 4 1 1 1 10

Đống nhị phân (Binary Heap)

24

KHOA CÔNG NGHỆ THÔNG TIN

03. HEAP SORT

1 5 3 4 10 1 5 3 4 5 1 3 4 5 4 3 1 1 4 3 5

感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿! ibaotu.com

1 1 5 5 1

5 5 1 4 3 4 3 3 3 3

4 4 4 1 5 10

Đống nhị phân (Binary Heap)

25

KHOA CÔNG NGHỆ THÔNG TIN

03. HEAP SORT

1 4 3 5 1 4 3 4 1 3 3 1 4

感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿! ibaotu.com

1 1 4 3

4 4 1 1 3 3 3 4

5 Đống nhị phân (Binary Heap)

26

KHOA CÔNG NGHỆ THÔNG TIN

03. HEAP SORT

3 1 4 3 1 3 1 1 3 1

感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿! ibaotu.com

3 3 3 1 1

1 1 1 3 4

Đống nhị phân (Binary Heap)

1 3 4 5 10 4 10 3 5 1

27

KHOA CÔNG NGHỆ THÔNG TIN

public void sort(int[] arr) { int n = arr.Length;

感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿! ibaotu.com

// Tạo đống (sắp xếp lại mảng) for(int i = n / 2 - 1; i >= 0; i--) heapify(arr, n, i);

// Từng bước trích xuất một phần tử ra khởi đống for(int i = n - 1; i > 0; i--){ // Di chuyển nút gốc hiện tại đến cuối int temp = arr[0]; arr[0] = arr[i]; arr[i] = temp;

// Gọi max heapify trên đống đã giảm heapify(arr, i, 0); } }

28

KHOA CÔNG NGHỆ THÔNG TIN

void heapify(int[] arr, int n, int i){ int largest = i; // Khởi gán largest là nút gốc int l = 2 * i + 1; // left = 2*i + 1 int r = 2 * i + 2; // right = 2*i + 2

感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿! ibaotu.com

// Nếu nút con trái lớn hơn nút gốc if(l < n && arr[l] > arr[largest]) largest = l; // Nếu nút con phải lớn hơn nút largest lúc này if(r < n && arr[r] > arr[largest]) largest = r;

// Nếu largest không phải là nút gốc if(largest != i){ int swap = arr[i]; arr[i] = arr[largest]; arr[largest] = swap;

// Đệ quy heapify tác động lên cây con heapify(arr, n, largest); } }

29

KHOA CÔNG NGHỆ THÔNG TIN

03. HEAP SORT

•Độ phức tạp của Heap Sort là: O (n log n) •Thuật toán Heap Sort đã bị giới hạn sử dụng vì thực tế Quick Sort và Merge Sort thì tốt hơn. Tuy nhiên, cấu trúc dữ liệu Heap (đống ) được sử dụng nhiều.

感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿! ibaotu.com

30

KHOA CÔNG NGHỆ THÔNG TIN

QUICK SORT

01.

MERGE SORT

02.

HEAP SORT

03.

KHOA CÔNG NGHỆ THÔNG TIN