Bài giảng Cấu trúc dữ liệu và giải thuật: Chương 4 Các giải thuật sắp xếp nâng cao, cung cấp cho người học những kiến thức như: quick sort; merge sort; heap sort. Mời các bạn cùng tham khảo!
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 toán xếp Quick Sort (sắp xếp nhanh) phức tạp chút so với thuật toán xếp khác •Cho danh sách phần tử, thuật tốn quick sort thuật toán chia để trị, đệ quy bao gồm phần chính: Chọn giá trị làm mốc (pivot value) Phân vùng danh sách làm hai: danh sách trái (nhỏ giá trị mốc), danh sách phải (lớn giá trị mốc) Đệ quy cho danh sách trái, đệ quy cho danh sách phải 感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿! ibaotu.com KHOA CÔNG NGHỆ THÔNG TIN 01 QUICK SORT Lấy giá trị làm mốc: Lấy giá trị lớn hai giá trị bên trái (3) Phân vùng danh sách thành hai danh sách: danh sách chứa phần tử có giá trị < mốc, danh sách chứa phần tử có giá trị ≥ mốc 感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿! ibaotu.com Danh sách < mốc = 1 Danh sách ≥ mốc = 3 Đệ quy Danh sách 1 xong 1 xong Đây danh sách cuối cùng… KHOA CÔNG NGHỆ THÔNG TIN Danh sách 4 3 xong 3 xong 6 5 xong xong xong 01 QUICK SORT l biên trái, r biên phải l pval l 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 Khi l < r, tìm tiếp l r Nếu l != r Hốn vị ptử l với r Khi l < r, tìm tiếp l r Dừng l ≥ r Tách làm danh sách dựa vào mục l KHOA CÔNG NGHỆ THÔNG TIN 4 1 5 9 r r 5 l r l r l r l,r 1 感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿! ibaotu.com 5 01 QUICK SORT Giao diện public int[] sort( int[] list ) { return (qsort( list, 0, list.Length - )); } // 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 hai số bên trái danh sách KHOA CÔNG NGHỆ THÔNG TIN if ( list[l] >= list[l+1] ) pval = list[l]; else pval = list[l+1]; 01 QUICK SORT Ở ta phân vùng danh sách thành hai danh sách Đây hai danh sách ảo danh sách xác định số, 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 bên l ++; trái tìm thấy giá while (( list[r] >= pval ) && ( l < r )) trị để hoán vị ta chạy hết r ; phần tử danh sách 感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿! ibaotu.com KHOA CÔNG NGHỆ THÔNG TIN 01 QUICK SORT if ( l != r ) { temp = list[l]; list[l] = list[r]; list[r] = temp; Nếu mục trái khác mục phải ta tim giá trị để hoán vị, ta thực hoán vị… } // if } // while 感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿! ibaotu.com Nếu xảy hốn vị 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 01 QUICK SORT Hiệu Quick Sort bị tác động phần tử chọn làm điểm mốc Hiệu xuất quick sort trường hợp xấu nhất, O(n2) 感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿! ibaotu.com Trường hợp tổng quát, quick sort có thực thi O(n log n) thời gian biểu thị bên phải… Quick Sort coi xếp nhanh Ưu điểm: cực nhanh KHOA CÔNG NGHỆ THÔNG TIN Nhược điểm: phức tạp đệ quy ạt 02 MERGE SORT •Merge Sort (Sắp Xếp Trộn) thuật toán đệ quy, chia để trị •Các bước thuật tốn là: ̶ Đệ quy phân vùng danh sách đầu vào thành hai danh sách, L1 L2 khoảng n/2 phần tử danh sách ta có tập danh sách với phần tử danh sách ̶ Đến đây, L1 L2 trộn lại thành danh sách S, phần tử L1 L2 đưa vào danh sách S theo thứ tự 感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿! ibaotu.com KHOA CÔNG NGHỆ THÔNG TIN 10 03 HEAP SORT •Thuật tốn Heap Sort cho xếp tăng dần: Tạo Binary Heap (đống nhị phân) từ danh sách Lúc này, phần tử lớn lưu nút gốc đống Hoán vị với phần tử cuối đống Giảm kích thước đống đơn vị Cuối cùng, chất đống gốc Lặp lại bước kích thước đống lớn 感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿! ibaotu.com KHOA CƠNG NGHỆ THƠNG TIN 18 03 HEAP SORT Ví dụ 1: 12 11 13 13 11 12 7 11 12 13 13 12 感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿! ibaotu.com 11 11 13 Cây nhị phân hồn chỉnh (Complete Binary Tree) KHOA CƠNG NGHỆ THÔNG TIN 11 12 12 13 Đống nhị phân (Binary Heap) 19 03 HEAP SORT 11 12 13 11 12 12 11 7 6 11 12 12 感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿! ibaotu.com 11 11 12 13 11 12 11 7 12 Đống nhị phân (Binary Heap) KHOA CÔNG NGHỆ THÔNG TIN 20 03 HEAP SORT 11 12 11 6 11 11 5 11 感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿! ibaotu.com 11 11 12 7 11 Đống nhị phân (Binary Heap) KHOA CÔNG NGHỆ THÔNG TIN 21 03 HEAP SORT 11 5 7 5 7 感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿! ibaotu.com 7 6 Đống nhị phân (Binary Heap) 11 KHOA CÔNG NGHỆ THÔNG TIN 22 03 HEAP SORT 5 6 5 5 5 感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿! ibaotu.com 6 Đống nhị phân (Binary Heap) 12 11 13 KHOA CÔNG NGHỆ THÔNG TIN 11 12 13 23 03 HEAP SORT Ví dụ 2: 10 10 10 1 10 10 10 感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿! ibaotu.com 10 5 5 10 Đống nhị phân (Binary Heap) KHOA CÔNG NGHỆ THÔNG TIN 24 03 HEAP SORT 10 5 5 1 5 感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿! ibaotu.com 5 10 4 4 3 Đống nhị phân (Binary Heap) KHOA CÔNG NGHỆ THÔNG TIN 25 03 HEAP SORT 4 3 4 感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿! ibaotu.com 4 3 Đống nhị phân (Binary Heap) KHOA CÔNG NGHỆ THÔNG TIN 26 03 HEAP SORT 3 3 3 1 感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿! ibaotu.com 1 Đống nhị phân (Binary Heap) 10 KHOA CÔNG NGHỆ THÔNG TIN 10 27 public void sort(int[] arr) { int n = arr.Length; // Tạo đống (sắp xếp lại mảng) for(int i = n / - 1; i >= 0; i ) heapify(arr, n, i); // Từng bước trích xuất phần tử khởi đống for(int i = n - 1; i > 0; i ){ // Di chuyển nút gốc đến cuối int temp = arr[0]; arr[0] = arr[i]; arr[i] = temp; 感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿! ibaotu.com // Gọi max heapify đống giảm heapify(arr, i, 0); } } KHOA CÔNG NGHỆ THÔNG TIN 28 void heapify(int[] arr, int n, int i){ int largest = i; // Khởi gán largest nút gốc int l = * i + 1; // left = 2*i + int r = * i + 2; // right = 2*i + // Nếu nút if(l < n && // Nếu nút if(r < n && trái arr[l] > phải arr[r] > lớn nút gốc arr[largest]) largest = l; lớn nút largest lúc arr[largest]) largest = r; 感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿! ibaotu.com // Nếu largest 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 heapify(arr, n, largest); } } KHOA CÔNG NGHỆ THƠNG TIN 29 03 HEAP SORT •Độ phức tạp Heap Sort là: O (n log n) •Thuật tốn Heap Sort bị giới hạn sử dụng thực tế Quick Sort Merge Sort tốt Tuy nhiên, cấu trúc liệu Heap (đống ) sử dụng nhiều 感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿! ibaotu.com KHOA CÔNG NGHỆ THÔNG TIN 30 01 QUICK SORT 02 MERGE SORT 03 HEAP SORT KHOA CÔNG NGHỆ THÔNG TIN ... 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 KHOA CÔNG NGHỆ THÔNG TIN 15 03 HEAP SORT •Heap Sort (Sắp xếp vun đống) thuật toán xếp dựa cấu trúc liệu Binary Heap (Đống nhị phân) Tìm phần tử lớn đặt cuối danh sách; lặp lại cho danh sách... Heap) KHOA CÔNG NGHỆ THÔNG TIN 24 03 HEAP SORT 10 5 5 1 5 感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿! ibaotu.com 5 10 4 4 3 Đống nhị phân (Binary Heap)